【问题标题】:Query using group_concat is returning only one row使用 group_concat 查询只返回一行
【发布时间】:2014-03-05 06:24:28
【问题描述】:

这是一个查询,应该获取用户信息、他们的项目信息,以及与该项目关联的所有图像路径的 group_concat。除此之外,我只从用户关注的人那里得到提到的信息。

然而,这只返回一行。

SELECT users.first_name, users.last_name, users.user_id, projects.project_id, projects.project_name, projects.project_time, group_concat(images.image_path)
FROM users, projects, images
WHERE users.user_id = projects.user_id
AND users.user_id IN (SELECT follow_user_2 FROM following WHERE follow_user_1 = 1)
 ORDER BY projects.project_id DESC

比较:以下查询 WORKS 在循环中提供所有用户信息和与该用户相关的项目信息。

SELECT users.first_name, users.last_name, users.user_id, projects.project_id, projects.project_name, projects.project_time 
    FROM users, projects
    WHERE users.user_id = projects.user_id 
    AND users.user_id IN (SELECT follow_user_2 FROM following WHERE follow_user_1 = 1)
    ORDER BY projects.project_id DESC

当我尝试使用 group_concat 时,它只会返回 一个 行,我不明白为什么。

有人可以帮帮我吗?谢谢你。如果我的问题不够清楚,我会详细说明。

如果这有帮助,这里有一个 SQL FIDDLE。 http://www.sqlfiddle.com/#!2/867f6/2 我不得不大大缩短我的架构。尝试以上两个查询以查看问题。

【问题讨论】:

  • 这个follow_user_1 = 1条件申请的是什么?似乎缺少与 images 表的连接条件。
  • @DipenduPaul 实际上是 $user_id 而不是“1”。它是动态的。

标签: mysql sql database


【解决方案1】:

当我尝试使用 group_concat 时,它只返回一行,我不明白为什么。

因为您没有在查询中使用GROUP BY 子句。使用 GROUP_CONCAT 之类的聚合函数时,您需要告诉数据库您希望合并数据的列。

目前您的查询正在对所有记录进行分组并在输出中给出 1 条记录。

如果您在查询中添加GROUP BY users.userid,则记录将按唯一用户标识分组。我更新了你的小提琴,它现在提供了 2 条记录:http://www.sqlfiddle.com/#!2/867f6/18

请注意:在标准 SQL 查询中,GROUP BY 子句中列出的列应与 SELECT 子句中的列匹配(聚合函数除外)。

【讨论】:

    【解决方案2】:

    只需在 your_query 中使用 group by 子句

    SELECT users.first_name, users.last_name, 
           users.user_id, projects.project_id, 
           projects.project_name, projects.project_time, 
           group_concat(images.image_path)
    FROM users, projects, images
        WHERE users.user_id = projects.user_id 
        AND users.user_id IN (SELECT follow_user_2 FROM following 
                              WHERE follow_user_1 = 1)
        group by users.first_name
        ORDER BY projects.project_id DESC;
    

    fiddle

    【讨论】:

    • 感谢您在回答中包含示例!我不知道该组必须去哪里。
    【解决方案3】:

    这是因为您没有在查询中使用group by 子句。因此 DBMS 将group_concat 一行中的所有行。因为比如有group by project_id

    【讨论】:

      猜你喜欢
      • 2012-11-19
      • 1970-01-01
      • 2014-10-18
      • 2012-06-22
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多