php 新行基于前一行的数据,如何防止重复

yxyvkwin  于 2022-12-17  发布在  PHP
关注(0)|答案(3)|浏览(81)

就是这张table

tbl_example:

ID -    unique -   auto increment,
name-   text
num-   Notunique
created  timestamp   curentdatetime

使用php5.5和msyql5.5每次插入时,首先根据插入的更新时间从表中获取num的值,例如,这是获取最后一列Numvalue的查询:

$sql1 =“从表中选择编号_示例ORDER BY创建了描述限制1”
现在,当它获得已添加的最后一行的值时,使用创建列时间戳,用于插入的新查询将是例如:

$sql2 "INSERT INTO tbl_example (name, num) VALUES ('TEMPNAME', $sql1 + 1)"

注意:这里我只在查询中添加了$sql1,它在功能上不返回值,只是为了使我的问题可以理解。
在这里,列num的值将基于$sql1的结果,
$question:如果两个用户或三个用户在相同的时间运行查询,则$sql1的结果对于其中三个用户将是相同的,因为数据将插入$sql2,并且num列的值对于其中三个用户将是相同的,
由于某种原因,我无法保持列num的唯一性,
在这种情况下,我怎样才能避免重复?

ztmd8pv5

ztmd8pv51#

here,他们解释如何使用lastinsertid。这就是你要找的。
如果你想在一个用分号分隔的查询中完成它,这完全是查询和SQL的问题,而不是Php。
像这样的东西应该做的工作:

SET @tmp=(SELECT MAX(NUM)+1 FROM tbl_example);
LOCK TABLES tbl_example READ;
INSERT INTO tbl_example (name, num) VALUES ('TEMPNAME', @tmp);
UNLOCK TABLES;

但您的问题似乎是数据库设计和缺乏客户机-服务器和SQL知识...

egmofgnx

egmofgnx2#

你可以使用一个select into来同时执行插入:

INSERT INTO tbl_example (name, num) VALUES (name, num)
  SELECT  tbl_example.name,   Max(tbl_example.num)+1
    FROM tbl_example GROUP BY tbl_example.num
ndasle7k

ndasle7k3#

试试看:

INSERT INTO tbl_example (name, num) select 'TEMPNAME', MAX(num)+1 from tbl_example

或者,如果仍需要按日期排序:

INSERT INTO tbl_example (name, num) select 'TEMPNAME', num+1 from tbl_example order by created DESC limit 1

相关问题