SQL:选择时增加行值
SQL: Increment row value when selected
在 Amazon RDS 中,我有一个 table、source
,形式为
id | name | times_shown
------------------------
0 | matt | 0
1 | jeff | 0
2 | jake | 0
. | ... | .
. | ... | .
. | ... | .
我有一个 SQL 查询,它从 table
中随机选择一行
SELECT * FROM source ORDER BY RAND() LIMIT 1;
我有没有办法修改这个查询,以便当它选择一行时,它也会导致 times_shown
列的值增加?如果没有,是否有其他方法,也许是模糊的列类型或 PHP SQL PDO 驱动程序设置,这会让我这样做吗?
根据我的理解, 询问类似的问题是关于更改 SELECT 的结果,而不是像我希望的那样实际更改数据库中的值。
什么 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;
没有。没有神奇的功能可以让您在 selecting 时更新行。您需要在 select 完成后更新该行。
我知道这个问题很久以前就有人回答了,但我只是想用 PostgreSQL 添加这个(你没有说你使用的是哪个 RDBMS)你可以使用 Common Table 表达式:
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;
在 Amazon RDS 中,我有一个 table、source
,形式为
id | name | times_shown
------------------------
0 | matt | 0
1 | jeff | 0
2 | jake | 0
. | ... | .
. | ... | .
. | ... | .
我有一个 SQL 查询,它从 table
中随机选择一行SELECT * FROM source ORDER BY RAND() LIMIT 1;
我有没有办法修改这个查询,以便当它选择一行时,它也会导致 times_shown
列的值增加?如果没有,是否有其他方法,也许是模糊的列类型或 PHP SQL PDO 驱动程序设置,这会让我这样做吗?
根据我的理解,
什么 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;
没有。没有神奇的功能可以让您在 selecting 时更新行。您需要在 select 完成后更新该行。
我知道这个问题很久以前就有人回答了,但我只是想用 PostgreSQL 添加这个(你没有说你使用的是哪个 RDBMS)你可以使用 Common Table 表达式:
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;