MySQL одновременный SELECT и UPDATE при работе с одной таблицей
05 Мар 2012
MySQL не позволит вам сделать выборку данных SELECT из таблицы в тот момент, когда одновременно делается обновление данных UPDATE той же таблицы.
Т.е. нижеприведенный пример – недопустимый:
1 2 3 4 5 6 7 |
UPDATE table_1 AS tbl_1 SET tbl_1.cnt = ( SELECT COUNT(*) FROM table_1 AS tbl_2 WHERE tbl_1.type = tbl_2.type ); |
1 2 3 |
Error: You can't specify target table 'tbl_1' for update in FROM clause |
В такой ситуации нужно использовать связывание таблицы с собой. Присоединяемая таблица будет реализована через временную таблицу, поэтому подзапрос откроет и закроет таблицу до того, как UPDATE откроет её. Таким образом данный запрос будет успешно выполнен:
1 2 3 4 5 6 7 8 9 |
UPDATE table_1 AS tbl_1 INNER JOIN( SELECT type, COUNT(*) AS cnt FROM table_1 GROUP BY type ) AS tbl_2 USING(type) SET tbl_1.cnt = tbl_2.cnt; |
скажите а как сделать чтобы форма была скрыта для пользователей до оплаты
Как изменить только одно поле по примеру корзины, где пользователь меняет количество товаров?
приветствую! подскажите по этой строчке: AS tbl_2 USING(type)
что вместо type нужно вписывать? поле у которого есть индекс? для чего вообще нужно писать USING(type)?
Есть ещё один способ, внутренний подзапрос сделать как SELECT FROM SELECT
http://ramzes.ws/blog/cant-specify-target-table-for-update-in-from-clause
Иногда такой вариант бывает удобнее