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

  • Автор темы Автор темы slon
  • Дата начала Дата начала

slon

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

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

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


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

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

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

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

[sql]
update `table` set `field`=(@max:=`field`+1) where ...;
select @max;
[/sql]
или есть подводные камни?
 
почитай про транзакции, только myisam их не поддерживает. Скорость упадет, но это думаю не так критично для тебя. Это цивилизованый способ!
 
Сверху