Обновление всей строки значениями из строки в другой таблице (cake / mysql)

#mysql #cakephp

#mysql #cakephp

Вопрос:

в настоящее время я использую подобный запрос для обновления таблицы с именем cats из таблицы с именем admin cats (идентификатор $ указан потому, что он находится в cake, это просто число, например, 1,2,3 и т.д.). Как есть, я называю каждое поле (их может быть 50) и говорю это следующим образом:

 update cats AS c, admin_cats set c.category=(select category from admin_cats where id=$id), [--removed 50 columns in the middle--] c.overviewImageText8=(select overviewImageText8 from admin_cats where id=$id) where c.id = $id");
  

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

 UPDATE cats SET * = SELECT * FROM admin_cats WHERE admin_cats.id = $id) WHERE cats.id IN ($id);
  

Конечно, я пробовал это, и это не сработало, но я хочу сделать это так, чтобы строка cats, идентификатор которой совпадает с $id, обновлялась значениями из admin_cats, которые имеют тот же идентификатор. Как я могу это сделать?

Ответ №1:

Конкретно для MySQL используйте REPLACE

 REPLACE cats (<optional columns>)
SELECT <cols> 
FROM admin_cats
WHERE admin_cats.id = $id;
  

Примечание: Предполагается, что cats имеет первичный ключ (например cats.id ) что ошибка повторяющейся строки может быть перехвачена, и строка заменена.

Примечание: другие базы данных не поддерживают замену или используют другой, похожий, но отличающийся синтаксис.