Mysql table 加入多行
Mysql table join with multiple rows
我有一个名为 works 的 table 和一个名为 images 的 table。一个作品可以有多个图像。我在 table images 中有一个 work_id 链接到 id table作品。
我正在尝试构建一个查询来获取所有作品和每件作品的所有相关图像。
目前我可以得到所有作品,但只有图像中的 1 行 table。
这是查询。
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
关于如何获取每个作品的图像 table 的所有行的任何帮助?
谢谢
删除 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
我有一个名为 works 的 table 和一个名为 images 的 table。一个作品可以有多个图像。我在 table images 中有一个 work_id 链接到 id table作品。 我正在尝试构建一个查询来获取所有作品和每件作品的所有相关图像。
目前我可以得到所有作品,但只有图像中的 1 行 table。 这是查询。
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
关于如何获取每个作品的图像 table 的所有行的任何帮助?
谢谢
删除 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