请帮帮我,我有这样的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
------------------
我希望用户检查数据没有重复行。如果一行正在检查一行,则其他用户无法看到该行。 请帮忙给我解决方案。谢谢!
答案 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
。