我有两张表product
和gallery
。每个产品可以在gallery
中包含多个图像。当我尝试获取LIMITed 5产品及其gallery
记录时,我会像以下一样加入:
SELECT * FROM `product` p LEFT JOIN `gallery` g ON p.product_id = g.product_id
LIMIT 0,5
此查询返回5条记录(即仅3个产品),如:
product_id name image
1 p1 im1.jpg
1 p1 im3.jpg
1 p1 xyz.jpg
2 p2 abc.jpg
3 p3 tuy.jpg
我需要的只是5种产品,无论每种产品有多少gallery
条记录,无论总记录数是多少。这是我的预期结果:
product_id name image
1 p1 im1.jpg
1 p1 im3.jpg
1 p1 xyz.jpg
2 p2 abc.jpg
3 p3 tuy.jpg
4 p4 a32.jpg
4 p4 t22.jpg
4 p4 a13c.jpg
5 p5 t34y.jpg
如何通过单个查询完成此操作?
答案 0 :(得分:2)
试试这个你可以通过子查询选择5个产品并加入图片,这样你就可以获得5个产品的记录,无论每个产品有多少图像
SELECT * FROM
`gallery` g
INNER JOIN
(SELECT * FROM `product` LIMIT 5) p
ON( p.product_id = g.product_id )
答案 1 :(得分:0)
为每个产品获取五张图片(这是对问题的误解):
SELECT *
FROM `product` p LEFT JOIN
`gallery` g
ON p.product_id = g.product_id
WHERE 5 <= (select count(*)
from gallery g2
where g2.product_id = g.product_id and g2.image <= g.image
);
另一种方法是将图像放入一个逗号分隔的列中:
select p.*, substring_index(group_concat(distinct image), ',', 5) as images
from product p left join
gallery g
on p.product_id = g.product_id
group by p.product_id;
答案 2 :(得分:0)
您可以像这样修改您的查询,
SELECT * FROM `product` p LEFT JOIN (SELECT * FROM `gallery` LIMIT 0,5) as g ON p.product_id = g.product_id
但是,使用子查询会降低您的效果。