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

使用GROUP_CONCAT、twee left JOIN、WHERE LIKE子句和GROUP BY创建Mysql查询,mysql,join,group-by,where,Mysql,Join,Group By,Where,我在创建mysql查询时遇到问题。我有以下表格:objects,object\u photos,photos 对象包含:id、街道等 object\u photos包含:object\u id、photo\u id、sort\u index 照片包含:id、文件等。 我需要得到streetname可能是“term”的对象,得到属于该对象的照片,将这些照片作为对象的子数组 如果可能的话,我希望拼写错误被原谅,如果太难做到,没问题,我会使用WHERE objects.street,比如%term%,

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

对象
包含:
id、街道等

object\u photos
包含:
object\u id、photo\u id、sort\u index

照片
包含:
id、文件等。

我需要得到streetname可能是“term”的对象,得到属于该对象的照片,将这些照片作为对象的子数组

如果可能的话,我希望拼写错误被原谅,如果太难做到,没问题,我会使用
WHERE objects.street,比如%term%
,并告诉人们键入streetname的一部分。 此外,我无法通过
排序索引对照片进行排序,并将这些照片限制为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'
我不理解这个查询中的
groupby
,这个查询缺少上面提到的一些我需要的子句


我希望你们能帮助我

我认为您不需要左连接。更好的做法是按所选的聚合函数字段分组

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”的要求。您能否共享一些示例数据和预期输出?GROUP_CONCAT是一个聚合函数,用于创建带分隔符的列表。如果按objects.id对
进行分组,则每个
objects.id
的结果将是一行,
GROUP\u CONCAT
值将是每个
objects.id
照片.file
列表。在不使用
分组方式的情况下进行尝试,您将看到不同之处。非常感谢!它起作用了!;)“将这些照片限制在1张”的意思是我只需要1张照片,例如缩略图。你为什么按身份证和街道分组?如果我省略“objects.street”,它会给出相同的结果。