[英]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.