2012-08-05 48 views
0

我在MySQL中有一個表,我需要連接多行。該表是這樣的:在MySQL中將多行組合成一個沒有組concat

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 

我知道,有兩行合併的方式通過使用組concat,但我想這樣做,以便每個字段保持分離,不加入就像使用組concat。

我已經在使用的語句試圖加入太多,這樣的事情:

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

但在少數情況下,我想加入行實在是太多了,超過61的上限在MySQL加入。

任何幫助,將不勝感激,謝謝。

--- ---編輯

有其確定每個訂單的產品的數目這個其他參數稱爲基團。該表是這樣的:

Order_ID | group 
1   1 
2   1 

因此,如果爲了屬於同一組,他們將有相同的列數,但一組,彼此之間的列數可能會有所不同。而我的查詢只是每個組,所以列數之間的差異沒有問題。

+0

你怎麼知道你需要多少列?是否有上限?你是否在生成(?)真實查詢之前計算它? – biziclop 2012-08-05 10:17:34

+0

嗨,我編輯了我的問題。基本上列數是靈活的,但在生成真實查詢之前已經計算出來。據我所知,沒有上限,但不會達到數百或更多。 – raven 2012-08-05 12:48:50

+0

嘗試搜索本網站或互聯網上的'mysql dynamic pivot'。 – 2012-08-05 17:31:58

回答

1

使用GROUP BY order_id,這將對您的結果進行分組並給出您描述的結果集。

編輯:

根據你試圖完成什麼,我建議你閱讀有關數據庫標準化。你的桌子上似乎沒有主鍵,是嗎?您的表結構誠實地沒有任何意義,您應該將訂單存儲在一個單獨的表中,例如order_id,user_id,...然後讓每個訂單的項目都有一個類似於您的表格,然後查詢屬於此訂單的所有訂單的所有訂單。

您不希望在一行中添加相同的結果,而是將每行讀入一個數組,然後遍歷數組。

+0

嗯,GROUP BY子句只根據它們的組對它們進行排序,而不是將它們組合起來。但謝謝你的答案。 – raven 2012-08-05 12:51:54

+0

你是什麼意思@raven,用「它排序」?好,但我想我現在看到你的意思了......我會更新我的答案...... – Chris 2012-08-06 21:51:49