删除GROUP BY。
SELECT w.id, w.title, i.imPath
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
ORDER BY w.ordr
这应该会给你所有你想要的行。
另一种看待它的方式:
create table works(id int, title varchar(10));
insert into works values (1, 'hello'), (2, 'world');
create table images(id int, work_id int, impath varchar(100))
insert into images values (1, 1, '/data/hello1.png'), (2, 1, '/data/hello2.png'), (3, 2, '/data/world1.png');
作品
id | title
1 | hello
2 | world
图片
id | work_id | impath
1 | 1 | /data/hello1.png
2 | 1 | /data/hello2.png
3 | 2 | /data/world1.png
在你的情况下可以翻译成这样的东西:
SELECT w.id, w.title,
GROUP_CONCAT(DISTINCT i.imPath ORDER BY i.imPath SEPARATOR ',') AS images
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id, w.title
ORDER BY w.ordr
Result:
id | title | images
1 | hello | /data/hello1.png,/data/hello2.png
2 | world | /data/world1.png
SQLFiddle 示例:http://sqlfiddle.com/#!9/b5784c/1
要获取图像的标题,您可以执行以下操作:
SELECT w.id, w.title,
GROUP_CONCAT(
DISTINCT CONCAT(i.imPath,'|',i.caption)
ORDER BY CONCAT(i.imPath,'|',i.caption)
SEPARATOR ',') AS images
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id, w.title
ORDER BY w.ordr