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

跨不同表的Concat-mysql/php堆栈,mysql,concat,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 正如你所看到的,一个苹果可以分为三种不同的馅饼,但与不同的制造商有联系。 我想

我有三张桌子:

    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
等等。。。我知道我可以对所有的馅饼进行一次查询,然后对所有的制造商进行另一次查询,但我想知道是否有一种方法可以将上一个表中的值浓缩为相同的“行”。我也知道我可以有很多行具有相同的值,但这是为那些只想看一眼苹果,马上知道谁用苹果做馅饼,而不是扫描多行的人准备的

谢谢你的帮助

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
检查手册页面。摆弄它的参数来格式化它的输出


检查手册页面。随意摆弄它的参数来格式化它的输出。

你们真是太棒了!然后,我会将
的结果字符串分解为
fputcsv
的数组,还是mysql已经将其数组化了?我可能会在
组中添加一个
ORDER BY
,以使结果具有确定性。如果我们想避免任何重复的
Makers.name
,还可以添加一个不同的关键字
GROUP_CONCAT(按Makers.name分隔符“,”区分Makers.name顺序)
@dama\u do\u bling这实际上会生成一个单列分隔结果,您可以按原样写入CSV文件。这里甚至不需要
fputcsv()
。@RandomSeed非常有用!出于好奇,如果我想在foreach循环中添加一些东西或其他东西,我该怎么做才能使所有东西都在数组/列中?你不能构建一个返回可变列数的查询(例如,假设一个给定的
Apple
)有任意数量的
maker
。看来你们真是太棒了!然后,我会将
的结果字符串分解为
fputcsv
的数组,还是mysql已经将其数组化了?我可能会在
组中添加一个
ORDER BY
,以使结果具有确定性。如果我们想避免任何重复的
Makers.name
,还可以添加一个不同的关键字
GROUP_CONCAT(按Makers.name分隔符“,”区分Makers.name顺序)
@dama\u do\u bling这实际上会生成一个单列分隔结果,您可以按原样写入CSV文件。这里甚至不需要
fputcsv()
。@RandomSeed非常有用!出于好奇,如果我想在foreach循环中添加一些东西或其他东西,我该如何做才能使所有东西都在数组/列中?您不能构建返回可变列数的查询(例如,假设给定的
苹果
中有任意数目的
制造商
)。