Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как одним запросом обновить 2 записи таблицы
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
твой запрос зафейлится т.к. нельзя селектить из самой изменяемой таблицы.
Цитата:
mysql> select * from testai;
+----+-------+
| id | value |
+----+-------+
| 1 | v1 |
| 2 | v2 |
| 45 | |
+----+-------+
3 rows in set (0.00 sec)
mysql> update `testai` a join testai b on a.id!=b.id
-> set a.value=b.value
-> where a.id in (1,2) and b.id in (1,2);
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from testai;+----+-------+
| id | value |
+----+-------+
| 1 | v2 |
| 2 | v1 |
| 45 | |
+----+-------+
3 rows in set (0.00 sec)
----- PostgreSQL DBA
DeepVarvar
Отправлено: 24 Ноября, 2014 - 15:11:58
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Мелкий, ну оки, джойн не селект, и еще может быть что апдейт, при инсерте точно не даст. Тем не менее запрос с междуджойнами выглядит страшно и мой вариант кавайнее.
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
3d_killer пишет:
а первое условие тогда для чего?
IF(условие;истина;ложь) - как я понимаю.
----- Сделать можно все. Главное одеть каску.
3d_killer
Отправлено: 24 Ноября, 2014 - 15:45:55
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
теперь понял, спасибо
OrmaJever
Отправлено: 24 Ноября, 2014 - 15:48:22
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
3d_killer запрос затрагивает только 2 записи с id = 5 и 7 (WHERE id in (5, 7))
если запись с id = 5 то ей присвоится позиция 1, иначе (id=7) позиция 2 (IF(id = 5, 1, 2)) (Добавление)
да, и авторские права на этот запрос принадлежат DeepVarvar, я его просто нагло украл и запостил от своего имени
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.