为了账号安全,请及时绑定邮箱和手机立即绑定

php mysql 我托盘加入 3 个表,但显示重复的结果

php mysql 我托盘加入 3 个表,但显示重复的结果

PHP
猛跑小猪 2023-09-15 14:36:51
我有3张桌子notificationsnot_id    |     not_name    -------------------------  2       |   Notification Name 01    3       |   Notification Name 02        4       |   Notification Name 03  groupsgroup_id      |     group_name  -------------------------  4       |   group name 1    5       |   group name 2      group_not---------------------------group_not_id |  group_id |  not_id  ---------------------------     1       |     4     |      2        2       |     4     |      3        3       |     5     |      4   我想显示与 group_id = 4 的组相关的所有通知但 php 端显示重复如下:Notification NameNotification Name 01    Notification Name 01    Notification Name 02    Notification Name 02MYSQL代码function getRows_not_group($group_id){     global $conn;$sql = "SELECT group_not.group_not_id, notifications.not_name, groups.group_name FROM group_not JOIN groups ON group_not.group_id = $group_id JOIN notifications ON group_not.not_id = notifications.not_id WHERE group_not.group_id = $group_id";    $result = mysqli_query($conn, $sql);    if(!$result)    {        echo mysqli_error($conn);    }    $rows = [];    if(mysqli_num_rows($result) > 0)    {        while ($row = mysqli_fetch_assoc($result))         {            $rows[] = $row;        }    }   return $rows;}
查看完整描述

2 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

groups需要修复引入表的连接条件。


你有:


SELECT ...

FROM group_not 

JOIN groups ON group_not.group_id = $group_id   --> here

JOIN notifications ON group_not.not_id = notifications.not_id 

WHERE group_not.group_id = $group_id

虽然您实际上需要:


JOIN groups ON group_not.group_id = groups.group_id

我还建议使用表别名来使查询更易于读写。您还应该使用参数化查询,而不是连接查询字符串中的变量。所以:


SELECT gn.group_not_id, n.not_name, g.group_name 

FROM group_not gn 

INNER JOIN groups g ON gn.group_id = g.group_id

JOIN notifications ON gn.not_id = n.not_id 

WHERE gn.group_id = ?


查看完整回答
反对 回复 2023-09-15
?
郎朗坤

TA贡献1921条经验 获得超9个赞

我建议您使用 SELECT DISTINCT 如下:

SELECT DISTINCT group_not.group_not_id, notifications.not_name, groups.group_name FROM group_not JOIN groups ON group_not.group_id = $group_id JOIN notifications ON group_not.not_id = notifications.not_id WHERE group_not.group_id = $group_id";

SELECT DISTINCT 语句用于仅返回不同(不同)的值。


查看完整回答
反对 回复 2023-09-15
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信