跨不同表的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循环中添加一些东西或其他东西,我该如何做才能使所有东西都在数组/列中?您不能构建返回可变列数的查询(例如,假设给定的苹果中有任意数目的制造商)。