我研究了这个问题(将多个子行组合成一行MYSQL),但它们都没有和我的一样。我需要一个解决方案,但我没有任何条件。我看到了数据透视表示例,但它们都使用条件或硬编码,例如见下文:
GROUP_CONCAT(if(colID = 1, value, NULL))
OR
Round(Sum(If( Month(o.orderdate)= 1, (d.unitprice*d.quantity)-d.discount, 0 )), 2 ) AS Jan,
它们都使用id值的Max / min,concat或hard编码。在我的例子中,根据where子句中的另一个id,从SQL查询中检索id。每个广告客户ID可以为零图像或10个。请看下面我想要实现的目标。如果有人认为它是重复的,请指出正确的答案?
基本上,我有3个表,我加入1,使用连接的select查询,我的MySQL如下:
select a.PK , a.Name, a.Email, i.Image_Name
FROM `advertiser` a
LEFT JOIN category c ON a.PK = c. FK
LEFT JOIN images I on a.PK = i.FK
where c.FK = 1
现在,我的结果是这样的:
PK Name Email Image_name
31 Sprouts info@Sprout.co.za Sprouts.jpg
31 Sprouts info@Sprout.co.za Bananas.jpg
31 Sprouts info@Sprout.co.za Apples.jpg
31 Sprouts info@Sprout.co.za Lemos.jpg
我想要的是:
PK Name Email Image_name_1 Image_name_2 Image_name_3 Image_name_4
31 Sprouts info@Sprout.co.za Sprouts.jpg Bananas.jpg Apples.jpg Lemos.jpg
每个PK上一行的所有图像。
非常感谢任何帮助。
答案 0 :(得分:0)
GROUP_CONCAT()
可能是你今年完成这个项目的最佳选择。如果您有10个图像的限制,它可能会正常工作。如果你试图连接数百个项目,它会被咆哮。
此查询值得尝试。
select a.PK , a.Name, a.Email,
GROUP_CONCAT(DISTINCT i.Image_Name SEPARATOR '|') Image_Names
FROM `advertiser` a
LEFT JOIN category c ON a.PK = c. FK
LEFT JOIN images I on a.PK = i.FK
where c.FK = 1
GROUP BY a.PK, a.Name, a.Email
答案 1 :(得分:0)
如果你没有必须在单独的字段中,你可以使用GROUP_CONCAT:
select a.PK , a.Name, a.Email, GROUP_CONCAT(i.Image_Name) AS Images
FROM `advertiser` a
LEFT JOIN category c ON a.PK = c. FK
LEFT JOIN images I on a.PK = i.FK
where c.FK = 1
group by a.PK;
答案 2 :(得分:0)
您可以使用以下查询 -
SELECT a.PK , a.Name, a.Email,
SUBSTRING_INDEX(GROUP_CONCAT(i.Image_Name),',',1) AS Image_name_1,
IF((LENGTH(GROUP_CONCAT(i.Image_Name)) - LENGTH(GROUP_CONCAT(i.Image_Name SEPARATOR ''))) < 1,'',SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(i.Image_Name),',',2),',',-1)) AS Image_name_2,
IF((LENGTH(GROUP_CONCAT(i.Image_Name)) - LENGTH(GROUP_CONCAT(i.Image_Name SEPARATOR ''))) < 2,'',SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(i.Image_Name),',',3),',',-1),',',-1)) AS Image_name_3,
IF((LENGTH(GROUP_CONCAT(i.Image_Name)) - LENGTH(GROUP_CONCAT(i.Image_Name SEPARATOR ''))) < 3,'',SUBSTRING_INDEX(GROUP_CONCAT(i.Image_Name),',',-1)) AS Image_name_4
FROM `advertiser` a
LEFT JOIN category c ON a.PK = c. FK
LEFT JOIN images I ON a.PK = i.FK
WHERE c.FK = 1
GROUP BY a.PK, a.Name,a.Email;