2013-12-16 4 views
0

Я хочу обновить «markes_category_in» с краткими значениями, например «9» и «3».Умножает значения в одном поле в mysql

UPDATE `rx000437_info`.`markers` 
SET `markers_category_id` = '9 , 3' 
WHERE `markers`.`markers_id` =25; 

Любые идеи?

+8

Сво bad pratice, поля должны содержать значение ONE. http://www.1keydata.com/database-normalization/first-normal-form-1nf.php – rray

+0

но ... работает? Я не хочу дублировать маркер ... – user1706064

+0

Хорошо, что вы собираетесь делать, когда вам нужно удалить 'marker_category_id' 9? – TheCarver

ответ

3

Я думаю, вам нужно перестроить базу данных. Наличие нескольких значений в одном поле - это плохая практика, если вам действительно не нужно иметь де-нормированную таблицу.

Что-то, как это будет работать лучше:

Маркеры

markersID | otherField 
-----------|------------------ 
25   | 
26   | 

MarkersCategories

markersID | markersCategoryID 
-----------|------------------ 
25   | 9 
25   | 3 
26   | 10 
26   | 15 
26   | 18 

Вы можете сделать несколько вставок, как это:

INSERT INTO MarkersCategories (markersID,markersCategoryID) VALUES (25,31),(25,32); 

UPDATE

Если вы действительно просто хотите иметь разделенный запятыми список и нужно добавить значение в конец списка, попробуйте:

UPDATE markers 
SET markers_category_id = CONCAT(markers_category_id, ', 9') 
WHERE markers_id = 25; 

See sqlFIDDLE demo.

+0

Хорошо, это плохая практика, но ... работает? – user1706064

+0

Хорошо, что вы собираетесь делать, когда вам нужно удалить 'marker_category_id' 9? Скажите, что у вас есть более быстрый метод, чем использовать 'DELETE FROM MarkersCategories WHERE markersCategoryID = 9'? – TheCarver

+0

Изготовление дороги из картонных изделий, но это считается плохой практикой, потому что она длится недолго и не имеет никакого сцепления. – TheCarver

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