在没有group_concat的MySQL中将多行合并为一行

时间:2012-08-05 09:37:19

标签: mysql sql

我在MySQL中有一个表,我需要连接多行。表格如下:

Order_ID  |  Item_ID  |  color
1           1           white
1           2           red
2           1           black
2           1           blue

我想根据Order_ID组合行,这将产生如下所示的结果:

Order_ID  |  Item_1_ID  | Item_1_color  | Item_2_ID  | Item_2_color
1           1             white           2            red
2           1             black           1            blue

我知道有一种方法可以使用group concat将两行合并为一行,但我想这样做,以便每个字段保持分离,而不是像使用group concat那样连接。

我已经尝试过使用语句连接,如下所示:

SELECT o.*, o1.* FROM order o INNER JOIN order o1 ON o.Order_ID = o1.Order_ID

但是在一些情况下,我想加入的行太多,超过了MySQL加入的限制。

任何帮助将不胜感激,谢谢。

--- ---编辑

还有一个名为group的其他参数确定了每个订单的商品数量。该表如下所示:

Order_ID   |  group
 1           1
 2           1

因此,如果订单属于同一个组,则它们将具有相同的列数,但在一个组和另一个组之间,列数可能不同。我的查询仅针对一个组,因此列数之间的差异没有问题。

1 个答案:

答案 0 :(得分:1)

使用GROUP BY order_id,这会对结果进行分组,并为您提供您所描述的结果集。

编辑:

根据您尝试完成的内容,我建议您阅读有关数据库规范化的内容。您的桌子上似乎没有主键,对吗?你的表结构老实说没有任何意义,你应该将订单存储在一个单独的表中,例如order_id,user_id,...然后有一个像你一样的表,每个订单的项目,然后查询你的所有订单属于这个订单的项目。

您不希望在一行中添加相同的结果,而是将每行读入数组,然后循环遍历数组。