2014-03-05 34 views
6

這是一個查詢,用於獲取用戶的信息,其項目信息以及與該項目關聯的所有圖像路徑的group_concat。爲了補充一點,我只收到用戶所關注的人提到的信息。使用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 我不得不縮短我的模式。試試兩個查詢以查看問題。

+0

在這個'follow_user_1 = 1'適用於什麼情況?加入條件'圖像'表似乎丟失。 –

+0

@DipenduPaul實際上是$ user_id而不是「1」。它是動態的。 –

回答

28

當我嘗試使用group_concat它只是返回給我一行,我不明白爲什麼。

因爲您還沒有在查詢中使用GROUP BY子句。當使用像GROUP_CONCAT這樣的聚合函數時,您需要告訴數據庫有關您希望將數據組合到的列。

當前您的查詢將分組所有記錄並在輸出中給出1條記錄。

如果在查詢中添加GROUP BY users.userid,那麼記錄將按照唯一的用戶標識符進行分組。我更新了你的小提琴,它現在給出了2條記錄:http://www.sqlfiddle.com/#!2/867f6/18

請注意:在標準SQL查詢中,GROUP BY子句中列出的列應與SELECT子句中的列匹配(聚合函數除外)。

3

只需使用group by子句中your_query

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