#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 ) что ошибка повторяющейся строки может быть перехвачена, и строка заменена.
Примечание: другие базы данных не поддерживают замену или используют другой, похожий, но отличающийся синтаксис.