2013-04-12 133 views
0

這是查詢SQL SELECT JOIN重複輸出

 

    SELECT 
     f.id AS main_forum_id, 
     f.forumname AS main_forumname, 
     m.useraid AS main_forum_moderator_id, 
     m.useradn AS main_forum_moderator_dn, 
     f2.id AS sub_forum_id, 
     f2.forumname AS sub_forumname, 
     m2.useraid AS sub_forum_moderator_id, 
     m2.useradn AS sub_forum_moderator_dn 
    FROM forums f 
     LEFT JOIN moderator m ON(m.forumid=f.id) 
     LEFT JOIN forums f2 ON(f2.relatedto=f.id) 
     LEFT JOIN moderator m2 ON(m2.forumid=f2.id) 
    WHERE f.adminid='$userid' 
     AND f.relatedto=0 
    ORDER BY f.id,f2.id DESC 

這是輸出: enter image description here

不知道如何解決它? 我的查詢有什麼問題?

什麼,我試圖做的是:

主論壇:

  • 主持人1
  • 主持人2
  • 主持人3 ...

    分論壇:

    • 主持人1
    • 主持人2 ...

    分論壇:

    • 主持人1 ...

ANATHER麥ñ論壇:

  • 主持人1 .....等。
+2

你缺少GROUP BY –

+1

GROUP BY什麼?有沒有什麼可以與... – GuyChabra

+0

@ user2124281有三個不同的子論壇MODS,你想要返回哪一個? – Taryn

回答

0

使用DISTINCT(f.id)DISTINCT(forum.id),也是在你的查詢添加GROUP BY f.id, 這將消除重複的結果。

+0

GROUP BY f.id離開1行... – GuyChabra

+0

使用重複的列而不是f.id然後.. – saveATcode

0
try : SELECT DISTINCT 

不知道它的工作原理

2

數據重複,因爲你有三個獨立sub_forum_moderator_idsub_forum_moderator_dn值,所以你必須爲每一個不同的行。

您有幾種選擇,你可以使用集合函數來爲每個列返回一個值,或者您可以使用GROUP_CONCAT那些行合併成一個單一的一行:

SELECT f.id AS main_forum_id, 
    f.forumname AS main_forumname, 
    m.useraid AS main_forum_moderator_id, 
    m.useradn AS main_forum_moderator_dn, 
    f2.id AS sub_forum_id, 
    f2.forumname AS sub_forumname, 
    group_concat(m2.useraid) AS sub_forum_moderator_id, 
    group_concat(m2.useradn) AS sub_forum_moderator_dn 
FROM forums f 
LEFT JOIN moderator m ON(m.forumid=f.id) 
LEFT JOIN forums f2 ON(f2.relatedto=f.id) 
LEFT JOIN moderator m2 ON(m2.forumid=f2.id) 
WHERE f.adminid='$userid' 
    AND f.relatedto=0 
GROUP BY f.id, f.forumname, m.useraid, m.useradn, 
    f2.id, f2.forumname 
ORDER BY f.id,f2.id DESC 
+0

但我仍然得到重複的數據,onl不同的是用戶名現在在數組中。我也無法得到subforum_moderator_id – GuyChabra

+0

@ user2124281我的建議是編輯您的表格結構,每個表的示例數據,然後所需的結果。 – Taryn

+0

我已添加「CONVERT(m2。useraid,CHAR(8))「來修復subforum_moderator_id,但我仍然得到紅色和藍色的行,這次每個塊進入1行 – GuyChabra