2015-04-15 5 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

Смежные вопросы