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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: update и select в одном запросе

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Ferro7
Отправлено: 04 Мая, 2015 - 17:19:06
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




PHP, sqlite.

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

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


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

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


Как бы объединить эти два запроса в один?
 
 Top
tuareg
Отправлено: 04 Мая, 2015 - 20:59:44
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Никак. Да и зачем?
 
 Top
LIME
Отправлено: 04 Мая, 2015 - 21:06:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




tuareg пишет:
Никак
вот тоже так хотел ответить но не работал с sqlite потому помалкивал
tuareg пишет:
Да и зачем?
как минимум для блокировки строки во избежании наложений запросов от параллельных процессов
хз как в этом бд делается атомарность
select for update там нет
это я нагуглил уже))
транзакция там есть?
Ferro7 короче надо думать как замутить транзакцию или может иную форму атомарности
но пофиг будет это 1 запрос или 2
 
 Top
Sail
Отправлено: 05 Мая, 2015 - 09:12:23
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




LIME пишет:
как минимум для блокировки строки во избежании наложений запросов от параллельных процессов

Если не требуется актуальное значение (которое возвратил-бы select после обновления данных), учитывающее возможные изменения другими процессами, то и огород городить ни к чему. Достаточно в вызывающем коде инкрементировать требуемые переменные.
Если же требуется актуальное значение - не поленитесь уж запрос на чтение данных выполнить Улыбка
PS: можно ещё в хранимую процедуру их завернуть...
 
 Top
LIME
Отправлено: 05 Мая, 2015 - 11:35:46
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Sail все скзанное есть чушь
(Добавление)
Sail пишет:
Достаточно в вызывающем коде инкрементировать требуемые переменные.
какие блять переменные???
где их взять???
Sail пишет:
не поленитесь уж запрос на чтение данных выполнить
а это уж само собой
куда без этого???
 
 Top
MiksIr
Отправлено: 05 Мая, 2015 - 13:55:25
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Sail все правильно говорит.

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

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


-----
self-banned
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB