我有一个有效的SQL语句,但其中有一个问题我无法解决。 当我离开加入我的表sites_photos时,sp.sites_id = s.id上可以有多个匹配,但我希望表只返回1.这是否可能。
SELECT s.*, sp.photo
FROM sites s
LEFT JOIN sites_photos sp
ON sp.sites_id = s.id
我的输出:2次标识30,但是使用不同的照片路径,我只想为该ID返回1,或者两者都捆绑在一个数组中。
Array
(
[0] => Array
(
[id] => 30
[url] => www.test.nl
[name] => Aleve
[date] => 2014-08-16
[cms_active] => Y
[archive] => N
[photo] => 2014080812365920120214103601number_1.jpg
)
[1] => Array
(
[id] => 30
[url] => www.test.nl
[name] => Aleve
[date] => 2014-08-16
[cms_active] => Y
[archive] => N
[photo] => 20140811021102news.jpg
)
)
答案 0 :(得分:2)
你可以这样做,使用GROUP_CONCAT
连接每个网站的所有照片并生成以逗号分隔的照片列表,然后你可以SUBSTRING_INDEX
使用GROUP_CONCAT
的结果来选择一张照片,您还可以在GROUP_CONCAT
中添加GROUP_CONCAT(sp.photo ORDER BY sp.id DESC)
SELECT s.*, SUBSTRING_INDEX(GROUP_CONCAT(sp.photo),',',1) photo
FROM sites s
LEFT JOIN sites_photos sp
ON sp.sites_id = s.id
GROUP BY s.id