我有一个称为作品的表格和一个称为图像的表格。一件作品可以有多个图像。我在表格图片中有一个work_id,它链接到表格作品的ID。
我正在尝试建立一个查询以获取所有作品以及每个作品的所有相关图像。

目前,我可以获取所有作品,但是图像表中只有1行。
这是查询。

SELECT w.id, w.title, i.imPath
FROM works w
LEFT JOIN images i ON w.id=i.work_id
WHERE w.isActive=1
GROUP BY w.id
ORDER BY w.ordr


对如何获取每个作品的图像表上的所有行有帮助吗?

谢谢

最佳答案

删除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

关于mysql - MySQL表联接多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32994655/

10-13 04:12