使用group_concat的查询只返回一行

时间:2014-03-05 06:24:29

标签: mysql sql database

这是一个查询,它应该获取用户的信息,项目的信息以及与此项目相关联的所有图像路径的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

TO COMPARE 以下查询 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 我不得不缩短我的架构。尝试上面的两个查询来查看问题。

3 个答案:

答案 0 :(得分:32)

  

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

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

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

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

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

答案 1 :(得分:4)

只需在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

答案 2 :(得分:0)

这是因为您没有在查询中使用import React, {useState} from 'react'; const useDictation = async dataToProcess => await getDataFromRemoteApiService(dataToProcess); const MyComponent = ({dataToProcess}) => { const [speechResults, setSpeechResults] = useState(""); setSpeechResults(speechResults + useDictation(dataToProcess)); return <Text>{speechResult}</Text> } 子句。因此,DBMS将group by排成一行。因为例如group_concat