2012-08-28 50 views
0

我運行這個SQL查詢SQL與GROUP_CONCAT

$sql = "select images.image, images.comment as feedDescription, 
     customers.fullName, CONCAT('[', GROUP_CONCAT(DISTINCT likes.uid),']') as likes, 
     CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('{\"userid\":\"', comments.fid, '\", \"comment\":\"', comments.comment, '\"}') separator ','),']') as comments 
     FROM images 
     LEFT JOIN customers on images.client_id = customers.client_id 
     LEFT JOIN likes on images.image = likes.image 
     LEFT JOIN comments on images.image = comments.image 
     WHERE images.fid=:userID 
     ORDER BY images.image LIMIT $offset,$limit"; 

唯一的問題是,我只得到了第一行...

我有圖像表,客戶表(取名字(我在圖片中得到的id),喜歡桌子(在圖片上做過「喜歡」的人)和評論(在桌子上寫下「評論」的人)

+1

歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)格式和語法突出顯示它! –

+0

'$ limit'的價值是什麼?你確定你沒有要求一行('images.fid =:userID')?請發佈一個示例用戶數據(來自所有4個表格)和輸出 – alfasin

+0

嗨,限制爲20並且偏移爲0 –

回答

1

您正在使用聚合功能一個查詢,所以MySQL自動返回一行 - 所有數據的聚合。

在其他數據庫中,這會產生錯誤,因爲您有混合的聚合列和非聚合列。這是MySQL的(錯誤)功能,稱爲「隱藏列」。

通過添加一組到您的查詢來解決這個問題:

group by images.image, images.comment, customers.fullName 

確保WHERE子句之後和ORDER BY之前添加此。

+1

這是正確的,但我不會稱之爲功能。如果查詢沒有正確實現(如這個),猜測可能意味着什麼是不好的行爲 – Argeman

+0

我很樂意解決它,並瞭解最新的解決方法。 –

+0

btw我收到語法錯誤或訪問衝突:1064您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在正如上面添加組之後使用'group by images.image,images.comment as feedDescription,customers.fullName LIM'附近的正確語法使用 –