SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.05.2011 23:23:10

cremnet
Участник
Откуда: Moscow
Зарегистрирован: 27.09.2010
Сообщений: 2

Как сделать выборку после UPDATE

Задача следующая одним запросом сделать выборку и апдейт
если по-этапно 1й


SELECT * FROM `tbl_cards` ORDER BY RAND() LIMIT 0,1;
 

2й этап мы обновляем этот ряд

UPDATE `tbl_cards` SET state=1-state WHERE id=__;/* незнаю что тут указать*/
 


пробовал так, но ничего не вышло

SELECT * ,
(UPDATE `tbl_cards` AS d SET d.state=1-d.state WHERE d.id=c.id)
FROM `tbl_cards` AS c ORDER BY RAND() LIMIT 0,1;
 


фишка в том чтобы осуществить это одним запросом по средством PHP функции mysql_query

Неактивен

 

#2 01.06.2011 11:09:21

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Как сделать выборку после UPDATE

1. Такие конструкции надо писать наоборот: SELECT должен быть в WHERE запроса UPDATE.
2. UPDATE и SELECT для одной и той же таблицы в одном запросе жить не могут, на сколько мне известно.

Для разных таблиц запрос будет примерно такого вида:

UPDATE `tbl_cards1` SET state=1-state WHERE id=(SELECT id FROM `tbl_cards2` ORDER BY RAND() LIMIT 1)


Но можно обмануть оптимизатор smile Примерно так:

UPDATE `tbl_cards` as `d`
JOIN (SELECT `id` FROM `tbl_cards` ORDER BY RAND() LIMIT 1) as `c`
ON `d`.`id`=`c`.`id`
SET d.state=1-d.state


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson