2015-04-15 50 views
0

我有一個表mysql的操縱結果,替換字符串

+-------------+--------------------+----------------------+-----------------------------+ 
| category_id | parent_category_id | category_path  |  category_name  | 
+-------------+--------------------+----------------------+-----------------------------+ 
|  13098 |     0 | 0     | Scooter 100cc+    | 
|  13099 |    13098 | 0,13098,    | Aprilia      | 
|  13100 |    13099 | 0,13098,13099,  | Atlantic/Arrecife 125 LC 4T | 
|  13101 |    13100 | 0,13098,13099,13100, | Fahrwerk     | 
+-------------+--------------------+----------------------+-----------------------------+ 

有沒有在MySQL的方式來構建category_path作爲category_path領域的替代品?
等都在category_path場的最後一行有

|Scooter 100cc, Aprilia, Atlantic/Arecife 125 LC 4T| 

,而不是

|0,13098,13099,13100| 
+2

你不應該存儲在一列逗號分隔值。閱讀規範化並重新設計您的數據庫。你會省去很多麻煩。另外,你會發現這個問題的簡單解決方案。在這種形式下,解決這個問題非常麻煩,我絕對不想這樣做。 – fancyPants

+0

它是一個商業產品,它的設計就是這樣,我無法做任何表格結構。我只需要將數千條記錄導入數據庫,這部分是我需要完成的最新步驟之一 – user37572

回答

0

你應該認真考慮優化數據庫的,規範的,因爲數據存儲爲逗號分隔的數據會導致你將來會遇到很多問題。

最好創建關聯表並將每個類別的一對多記錄存儲到該表中。

但是在目前的情況下,你可以使用find_in_set()

select 
c1.category_id, 
c1.parent_category_id, 
group_concat(c2.category_name) as category_path, 
c1.category_name 
from category c1 
left join category c2 on find_in_set(t2.parent_category_id,c1.category_path) 
group by c1.category_id; 
+0

這會操縱數據,但不是正確的方式。我會盡力詳細說明這一點。謝謝 – user37572