跨越不同表的Concat - mysql / php堆栈

时间:2013-08-01 20:45:22

标签: mysql concat

我有三张桌子:

    Apples

ID|Name
1 |Granny
2 |Red
3 |Delicious

Pies
ID|Name|Apple_ID|Maker_ID
1 |Pie |1       |1
2 |Pie2|1       |2
3 |Pie3|1       |3
4 |Pie4|2       |1


Makers
ID|Name
1 |Jeff
2 |Jerry
3 |Jeremy

正如你所看到的,一个苹果可以在三个不同的馅饼中,但与不同的制造商有关。 我想要一个我准备以CSV格式导出的查询,执行以下操作:

我希望每行获得一个苹果,列中包含苹果ID,名称和制造商名称,但不是两个表之间的“临时”链接,Pies。像这样:

Granny, Jeff, Jerry, Jeremy
Red, Jeff

等...我知道我可以对所有馅饼进行一次查询,然后对所有制造商进行另一次查询,但我想知道是否有办法将最后一个表中的值连接起来,好像它们在同一个“行”中一样。我也知道我可以拥有许多具有相同值的行,但是它为那些只想看苹果的人准备,并且知道谁从中制作了一个馅饼,而不是扫描多行。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

SELECT CONCAT( Apples.name, ', ', GROUP_CONCAT(Makers.name SEPARATOR ', ') )
FROM Apples
JOIN Pies ON (Pies.Apple_ID = Apples.ID)
JOIN Makers ON (Makers.ID = Pies.Maker_ID)
GROUP BY Apples.name

查看GROUP_CONCAT()手册页。摆弄其参数以根据需要格式化其输出。