2013-10-04 113 views
-1

我在創建mysql查詢時遇到問題。我有以下表格:objects, object_photos, photos使用GROUP_CONCAT創建Mysql查詢,twee左連接,WHERE LIKE子句和GROUP BY

objects包含:id, street, etc..

object_photos包含:object_id, photo_id, sort_index

photos包含:id, file, etc...

我需要得到具有streetname的對象可能是 '術語',得到屬於該對象的照片將這些照片作爲對象的子陣列。

如果可能的話,我想要一個錯字,如果它太難了,沒問題,我會用WHERE objects.street LIKE %term%,並告訴人們鍵入街道名的一部分。 另外,我無法用sort_index排序的照片和限制的那些照片1

隨着谷歌搜索,閱讀等,我想出了一個查詢:

SELECT objects.id, object.street, 
GROUP_CONCAT(photos.file) AS photo 
FROM objects 
LEFT JOIN object_photos 
ON object_photos.object_id=objects.id 
LEFT JOIN photos 
ON photos.id=object_photos.photo_id 
GROUP BY objects.id' 

我不理解GROUP BY這個查詢和這個查詢缺少我需要的上述幾個子句。

我希望你們的人能幫助我!

+0

'GROUP_CONCAT'是一個聚合函數,它使用分隔符創建一個列表。如果你的GROUP BY objects.id,你的結果將是每個objects.id的一行,而GROUP_CONCAT的值將是每個objects.id的'photo.file'列表。嘗試沒有「GROUP BY」,你會看到不同之處。 –

回答

0

我不認爲你需要左連接。更好的做法是將GROUP BY作爲聚合函數的SELECT字段。

SELECT objects.id, object.street, GROUP_CONCAT(photos.file ORDER BY sort_index) AS photo 
FROM objects 
JOIN object_photos 
    ON object_photos.object_id=objects.id 
JOIN photos 
    ON photos.id=object_photos.photo_id 
WHERE object.street LIKE '%term%' 
GROUP BY objects.id, objects.street 

我不明白你的「限制這些照片1」的請求。你能分享一些樣本數據和預期的輸出:

+0

非常感謝!有用! ;) 「限制那些照片爲1」我的意思是我只需要1張照片,例如爲縮略圖。 爲什麼你GROUP BY ID和街道?如果我忽略'objects.street',它會給出相同的結果。 –