我有2张桌子。第一个是产品列表,第二个是连接到每个产品的图像列表。

产品为P

ID | NAME
1 | apple
2 | plum
3 | carrot
4 | strawberry
5 | pie



IMAGES作为IM

PRODUCT_ID | IMAGE | I_NAME
1 | 1 | app_abc.jpg
1 | 2 | apple.jpg
1 | 3 | appleonemoretime.jpg
2 | 1 | plum.jpg
2 | 2 | plum2.jpg
2 | 3 | plum3.jpg
2 | 4 | plum4.jpg
3 | 1 | somecarrot.jpg
4 | 1 | s1.jpg


等等...

附加信息:
 -每个产品至少要有1张图片。
 -与一种产品关联的最大图像数量为60。我想要得到:具有图像名称的产品列表(一行=一种产品)。
 -我将按product.id搜索产品-我想在一列中获取图片,并用逗号分隔,我不想获取60个“空”列。

例如:如果我搜索p.id(1,3),我想得到类似以下内容:

P.ID | IM1.I_NAME
1 | app_abc.jpg, apple.jpg, appleonemoretime.jpg
3 | somecarrot.jpg


有办法吗? 'COALESCE'对这个有好处吗?

我现在所拥有的是:

select p.id
from products p
join images im on im.product_id = p.id
where p.id in (1, 3)

最佳答案

GROUP_CONCAT是您最好的朋友,您的查询应如下所示:

SELECT p.id, GROUP_CONCAT( im.i_name SEPARATOR '; ' ) AS images
FROM products p
LEFT JOIN images im ON (im.product_id = p.id)
WHERE p.id IN (1, 3) GROUP BY p.id

关于mysql - MySQL\联接2个表并在一列中显示2行的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22906158/

10-11 02:49