Php Mysql非顺序插入问题

Php Mysql非顺序插入问题,php,mysql,insert,null,Php,Mysql,Insert,Null,我有一个包含100000条记录的表,描述如下: ID primary unique int (5) Ticket unique int (5) user varchar (20) 该表上仅填充了前两个字段,即ID和Ticket。我现在需要在请求时为该票证分配一个用户。我该怎么做?如何找到下一个空用户在表中的位置 编辑:按要求解释场景 这是一种彩票制度。票号已经生成并填入表中。现在,当用户注册一张票证时,他们的用户名必须插入到用户字段中下一张可用票证的旁边。我相信有一种更简单的方法可以做到这一点

我有一个包含100000条记录的表,描述如下:

ID primary unique int (5)
Ticket unique int (5)
user varchar (20)
该表上仅填充了前两个字段,即ID和Ticket。我现在需要在请求时为该票证分配一个用户。我该怎么做?如何找到下一个空用户在表中的位置

编辑:按要求解释场景

这是一种彩票制度。票号已经生成并填入表中。现在,当用户注册一张票证时,他们的用户名必须插入到用户字段中下一张可用票证的旁边。我相信有一种更简单的方法可以做到这一点,那就是在一个新表中插入包含所有信息的票证,但这确实是一个听起来很愚蠢的要求


那么,我如何找出下一个空用户在表中的位置呢?

表的排序方案是什么

如果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

通过执行以下操作查找下一个空行:

SELECT ID 
FROM Ticket
WHERE user IS NULL 
LIMIT 1;
当你更新时,你必须小心,你没有竞争条件,另一个进程也获得相同的ID。你可以通过有一个单独的表保存ticketLocation来防止重复分配问题,并给它一个指向票证表的唯一外键约束。

这假设ID是自动递增的

首先查找用户字段为空的第一条记录:

Select * from users where user is null order by id asc limit 1;
然后填写:

Update users set user = [username] where id = [id from select];

您也可以在单个查询中执行此操作:

UPDATE users SET user = [username] where id = 
(select min(id) from users where user is null) 

您已经有ID列,请按ID列插入用户。@Stewie,如何?在表中插入用户值'user',其中id=???您能解释一下您的场景吗?哪一个表包含这些信息?这张桌子的作用是什么?你想如何使用这个ID和票证?@Aswhine Dhekane/用场景编辑了这篇文章注意ID不是自动递增的,请参见上面问题中的表格布局。@Johan-他确实提到了这一点,是的,但似乎喜欢我的答案。在我看来,从他描述问题的方式来看,他并没有考虑通过ID进行选择,而只是考虑票证字段,它不会是连续的。