我有一个名为 works 的表和一个名为 images 的表。一件作品可以有多张图片。我在表格图片中有 work_id ,其链接到表工作的 id 。 我正在尝试构建单个查询来获取每个作品的所有作品和所有相关图像。
目前我可以从图像表中获得所有作品但只有一行。 这是查询。
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
有关如何获取每个作品的图像表中所有行的任何帮助吗?
谢谢
答案 0 :(得分:3)
删除delete from users
where (UserName, CreatedOn) not in (select UserName, MIN(CreatedOn)
from users
group by UserName)
。
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
SQLFiddle示例:http://sqlfiddle.com/#!9/b5784c/1
要获得图像的标题,您可以执行以下操作:
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