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
Форумы портала PHP.SU :: Версия для печати :: update и select в одном запросе
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » update и select в одном запросе

Страниц (1): [1]
 

1. Ferro7 - 04 Мая, 2015 - 17:19:06 - перейти к сообщению
PHP, sqlite.

Дано: рейтинг пользователя. Плюсуем рейтинг командой

CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `users` SET `rating`+= 1 WHERE `id`=5


Требуется в ответ возвращать итоговое значение рейтинга, т.е.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `rating` FROM `users` WHERE `id`=5


Как бы объединить эти два запроса в один?
2. tuareg - 04 Мая, 2015 - 20:59:44 - перейти к сообщению
Никак. Да и зачем?
3. LIME - 04 Мая, 2015 - 21:06:49 - перейти к сообщению
tuareg пишет:
Никак
вот тоже так хотел ответить но не работал с sqlite потому помалкивал
tuareg пишет:
Да и зачем?
как минимум для блокировки строки во избежании наложений запросов от параллельных процессов
хз как в этом бд делается атомарность
select for update там нет
это я нагуглил уже))
транзакция там есть?
Ferro7 короче надо думать как замутить транзакцию или может иную форму атомарности
но пофиг будет это 1 запрос или 2
4. Sail - 05 Мая, 2015 - 09:12:23 - перейти к сообщению
LIME пишет:
как минимум для блокировки строки во избежании наложений запросов от параллельных процессов

Если не требуется актуальное значение (которое возвратил-бы select после обновления данных), учитывающее возможные изменения другими процессами, то и огород городить ни к чему. Достаточно в вызывающем коде инкрементировать требуемые переменные.
Если же требуется актуальное значение - не поленитесь уж запрос на чтение данных выполнить Улыбка
PS: можно ещё в хранимую процедуру их завернуть...
5. LIME - 05 Мая, 2015 - 11:35:46 - перейти к сообщению
Sail все скзанное есть чушь
(Добавление)
Sail пишет:
Достаточно в вызывающем коде инкрементировать требуемые переменные.
какие блять переменные???
где их взять???
Sail пишет:
не поленитесь уж запрос на чтение данных выполнить
а это уж само собой
куда без этого???
6. MiksIr - 05 Мая, 2015 - 13:55:25 - перейти к сообщению
Sail все правильно говорит.

Все зависит от использования этого инкремента. Если человек нажимает +1 и это уходит на сервер - совсем не обязательно с сервера получать актуальное число, можно просто получить успешность, а на клиенте сделать +1 и показать человеку.

Так что ситуацию нужно в комплексе рассматривать. Или взять postgresql, он умеет возвращать после апдейта.

 

Powered by ExBB FM 1.0 RC1