PHP, MySQL: дублировать ряды строк, но изменить 1 столбец? - PullRequest
1 голос
/ 27 октября 2009

У меня есть таблица с именем scheduler_sched, в которой есть несколько столбцов, включая столбец schedule_id.

Мне нужна функция, в которой я могу передать 2 идентификатора (copy_from_id, copy_to_id) в качестве параметров. И что мне нужно сделать, это взять каждую строку, где schedule_id = copy_from_id И продублировать его, но изменить copy_from_id на copy_to_id

Так что, в принципе, я хочу эквивалентно этому:

UPDATE scheduler_sched SET schedule_id = 32 WHERE schedule_id = 28

Только я не хочу ОБНОВЛЯТЬ какие-либо строки, я хочу создавать дубликаты с новыми идентификаторами

Имеет ли это смысл?

Как я могу это сделать?

СПАСИБО!

(Кстати, schedule_id не является уникальным / индексным полем в этой таблице)

Ответы [ 4 ]

2 голосов
/ 27 октября 2009
Insert into scheduler_sched (column1, column2, column3,schedule_id ) 
Select column1, column2, column3, 32 from scheduler_sched WHERE schedule_id = 28
1 голос
/ 27 октября 2009

Я думаю, что синтаксис ON DUPLICATE KEY UPDATE может вам помочь:

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

например:.

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;
0 голосов
/ 27 октября 2009

Поскольку вы не указали версию MySQL, я предполагаю, что она самая последняя (5.4).

Если я вас правильно понимаю, вы сможете реализовать это с помощью триггеров: http://dev.mysql.com/doc/refman/5.4/en/create-trigger.html

Одним из преимуществ использования триггеров является то, что все это обрабатывается самой базой данных.

0 голосов
/ 27 октября 2009

Просто вставьте новую строку вместо обновления. Сначала выберите SELECT, если этот schedule_id 28 существует, и, если он существует, вставьте новый с идентификатором.

...