SQL: увеличить значение строки при выборе

В Amazon RDS у меня есть таблица, sourceв форме

id | name | times_shown
------------------------
0  | matt | 0
1  | jeff | 0
2  | jake | 0
.  | ...  | .
.  | ...  | .
.  | ...  | .

У меня есть запрос SQL, который случайным образом выбирает строку из этой таблицы

SELECT * FROM source ORDER BY RAND() LIMIT 1;

Есть ли способ для меня изменить этот запрос так, чтобы при выборе строки он также вызывал значение times_shown столбец для увеличения? Если нет, то есть ли какой-нибудь другой способ, может быть, скрытый тип столбца или настройка драйвера PHP SQL PDO, который позволил бы мне сделать это?

Из моего понимания, этот ТАК вопрос что-то похожее — об изменении результатов SELECT, а не об изменении значения в БД, как я надеюсь сделать.

0

Решение

Что такое RDMS? Если MySQL, вероятно, нужно сделать в две части, измените SELECT в SELECT ... FOR UPDATE а затем отдельно обновить times_shown поле

Взгляни на: https://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

И пример там:

SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;
1

Другие решения

Нет. Нет волшебной функциональности, которая позволяет обновлять строку при ее выборе. Вам нужно будет обновить строку после выбора.

1

Я знаю, что на этот вопрос был дан ответ довольно давно, но я просто хотел добавить, что с PostgreSQL (вы не сказали, какую СУБД вы используете) вы можете сделать это за один шаг, используя выражение Common Table Expression:

with updated_values as (
update source set times_shown = times_shown + 1
where id in (select id from sources order by random() limit 1)
returning id, name, times_shown
)
select * from updated_values;
1
По вопросам рекламы [email protected]