在Postgresql中选择数据的多个过程

时间:2016-11-07 03:47:14

标签: php postgresql

请帮帮我,我有这样的postgresql表:

tbl_user
----------------------------------
id          name        is_checked
----------------------------------
1           data1       0
2           data2       0
3           data3       0
4           data4       0
5           data5       0
6           data6       0
7           data7       0
8           data8       0
9           data9       0
10          data10      0
----------------------------------

在php中我有很多用户登录。 当他们获取数据进行检查时, 他们会看到不同的数据 因为我希望他们为用户差异数据更新字段is_checked =“1”:

- user 1:
    select * from tbl_user limit 2;
    => result:
        1           data1       0
        2           data2       0

- user 2:
    select * from tbl_user limit 2;
    => result:
        3           data3       0
        4           data4       0

- user 3:
    select * from tbl_user limit 2;
    => result:
        5           data5       0
        6           data6       0
------------------

我希望用户检查数据没有重复行。如果一行正在检查一行,则其他用户无法看到该行。 请帮忙给我解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

is_checked字段使用3个值,例如:

0表示“争抢” 1表示“正在检查”
2表示“已选中”

然后每个工人都选择这样的值:

UPDATE tbl_user t
SET is_checked = 1
FROM (SELECT t1.id
      FROM tbl_usr t1
      WHERE t1.is_checked = 0
      LIMIT 2
      FOR UPDATE) t2
WHERE t.id = t2.id
RETURNING t.*;

检查完成后,is_checked将更新为2。

您可能希望使用integer的枚举数据类型而不是is_checked