выборка и обновление записи в одном запросе

slon

Новичок
выборка и обновление записи в одном запросе

Помогите плиз новичку в этом деле.
Есть таблица xxx скажем с одной записью num тип integer
нужно в одном запросе увеличить num скажем на 2 и вывести результат
скажем echo $num;
Как записать запрос?
если можно полностью, что бы я не догадывался как там и что.
 

antson

Новичок
Партнер клуба
slon - ник часом не гаррисоном навеян ? (был там такой хакер в стальной крысе)

использование внутри селекта update и delete невозможно.
единственная реальная задача, когда вы ограничены только одним запросом, это скл-инжект . В реальных случаях
2 запроса не должны смущать
updete x set y=y+2
select y from x


http://www.sql.ru/forum/actualthread.aspx?tid=15240

так что с такими вопросами проходите мимо.
 

Alexandre

PHPПенсионер
нужно в одном запросе увеличить num скажем на 2 и вывести результат
скажем echo $num;
select num+2 from xxx
выведется увеличенная на 2 значение поля num но при этом само оно не изменится
можно написать хранимую процедуру, тогда это будет вызов в одном запросе: call inc( xxx, num, 2 );
 

slon

Новичок
2 запроса не должны смущать
updete x set y=y+2
select y from x
ну если двумя запросами не обойтись, то возможна ли тогда ситуация ,когда например несколько пользователей практически одновременно делают АПДЕЙТ и СЕЛЕКТ и у них в браузере могут появиться одинаковые значения $num ? или вероятность этого слишком мала?
 

antson

Новичок
Партнер клуба
slon
если ты апдейтишь кол-во товара, то одинаковое количество и должно появиться.

что конкретно ты хранишь так в базе ?

зачем весь огород ?
 

Gas

может по одной?
2 запроса, зато без всяких локов, независимо от движка и не должно быть проблем с получением "не той" информации.

[sql]
update `table` set `field`=(@max:=`field`+1) where ...;
select @max;
[/sql]
или есть подводные камни?
 

valeraorg

Новичок
почитай про транзакции, только myisam их не поддерживает. Скорость упадет, но это думаю не так критично для тебя. Это цивилизованый способ!
 

slon

Новичок
OK спасибо вроде инфы пока достаточно буду работать.
 
Сверху