0

这是查询

    选择
        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
    来自论坛 f
        LEFT JOIN 主持人 m ON(m.forumid=f.id)
        左加入论坛 f2 ON(f2.relatedto=f.id)
        左加入版主 m2 ON(m2.forumid=f2.id)
    其中 f.adminid='$userid'
        和 f.relatedto=0
    按 f.id,f2.id DESC 排序

这是输出: 在此处输入图像描述

知道如何解决吗?我的查询有什么问题?

我想做的是:

主论坛:

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

    分论坛:

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

    分论坛:

    • 主持人1...

ANATHER 主论坛:

  • 版主1……等等……
4

3 回答 3

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
于 2013-04-12T13:48:46.443 回答
0

使用DISTINCT(f.id)or DISTINCT(forum.id),也添加GROUP BY f.id在您的查询中,这将消除重复的结果。

于 2013-04-12T13:41:56.367 回答
0
try : SELECT DISTINCT

不确定它是否有效

于 2013-04-12T13:42:21.867 回答