簡體   English   中英

php mysql I 托盤加入 3 個表格,但顯示重復的結果

[英]php mysql I tray to join 3 table but in show duplicated result

我有 3 個表

notifications

not_id    |     not_name    
-------------------------
  2       |   Notification Name 01  
  3       |   Notification Name 02      
  4       |   Notification Name 03  

groups

group_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 Name

Notification Name 01    
Notification Name 01    
Notification Name 02    
Notification Name 02

MYSQL代碼

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;
}

需要修復引入表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 = ?

我建議您使用 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 語句用於僅返回不同的(不同的)值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM