使用GROUP_CONCAT,twee left join,WHERE LIKE子句和GROUP BY创建Mysql查询

时间:2013-10-04 13:23:12

标签: mysql join group-by where

我在创建mysql查询时遇到问题。我有以下表格:objects, object_photos, photos

objects包含:id, street, etc..

object_photos包含:object_id, photo_id, sort_index

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

我需要将streetname的对象设置为'term',获取属于该对象的照片,将这些照片作为对象的子数组。

如果有可能,我想要打印错误,如果它太难做,没问题,我将使用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,而且这个错过了我上面提到的一些条款。

我希望你们有人能帮帮我!

1 个答案:

答案 0 :(得分: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”的要求。你能分享一些样本数据和预期的输出

吗?