我有一张包含100,000条记录的表格描述为:
ID primary unique int (5)
Ticket unique int (5)
user varchar (20)
该表上仅填充的字段是前两个,ID和票证。我现在需要在请求时将用户分配给该票证。我怎样才能做到这一点?如何找到下一个空用户在桌面上的位置?
编辑:按要求解释场景
它的各种彩票系统。票号已经制作并填入表格中。现在,当用户注册票证时,必须在用户字段中将其用户名插入下一个可用票证旁边。我确定这是一个更简单的方法,通过在新表上插入包含所有信息的票证,但这是确实的要求,因为听起来很愚蠢。
那么如何找出下一个空用户在桌面上的位置呢?
答案 0 :(得分:0)
该表的排序方案是什么?
如果Id编号是连续的,则应该有效:
SELECT ID FROM TABLE WHERE user is null ORDER by ID LIMIT 1
如果Id编号是非连续的,您可以使用表格的自然排序(按输入时排序)
SELECT ID FROM TABLE WHERE user is null LIMIT 1
答案 1 :(得分:0)
通过执行以下操作查找下一个NULL行:
SELECT ID
FROM Ticket
WHERE user IS NULL
LIMIT 1;
当你更新时,你必须要小心,你没有竞争条件与另一个进程也获得相同的ID。您可以通过使用一个包含TicketAllocation
的单独表来防止此重复分配问题,并为其指定一个指向Ticket
表的唯一外键约束。
答案 2 :(得分:0)
这假定ID
是自动递增的。
首先找到user字段为null的第一条记录:
Select * from users where user is null order by id asc limit 1;
然后填写:
Update users set user = [username] where id = [id from select];
答案 3 :(得分:0)
您也可以在一个查询中执行此操作:
UPDATE users SET user = [username] where id =
(select min(id) from users where user is null)