当前位置: 首页 > 知识库问答 >
问题:

PHP: MySQL,新行是基于前置行的数据,如何防止重复

端木高邈
2023-03-14

这是桌子,

tbl_example:

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

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

$sql1="SELECT num从tbl_exampleORDER BY创建DESC限制1"

现在,因为它得到了被添加的最后一行的值,创建列时间戳,插入的新查询将例如:

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

注意:这里我只在查询中添加了$sql1,它在功能上不返回值,只是为了让我的问题可以理解。

这里,列num的值将基于$sql1的结果,

$问题:如果两个用户或三个用户在相同的第二个精确时间运行查询,那么其中三个的$sql1的结果将是相同的,就像在$sql2上一样,html" target="_blank">数据将插入,num列的值将相同其中三个,

由于某种原因,我不能保持列num唯一,

在这种情况下,我如何防止重复???

提前问候。

共有3个答案

霍财
2023-03-14

尝试:

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
凌声
2023-03-14

您可以使用“选择插入”,以便同时执行插入操作:

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
魏烨熠
2023-03-14

转到这里,他们解释了如何使用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知识。。。

 类似资料:
  • 问题内容: 我不想拥有用户或位置,因为我可以有多行用户包含相同数据,或者有多行位置包含相同数据。我只想避免用户和位置都具有一定的价值,因为该行重复了许多次。 例如:这还可以 但这不行: 因为已经存在其中user = 1和location = 2的行。 如何避免重复? 问题答案: 声明对(用户,位置)的唯一约束。

  • 在我的项目中,我有两页,第一页用于输入数据,第二页用于向用户显示数据。刷新结果页时,数据将被复制。我试图解决这个问题,但我不熟悉PRG模式。如果用户刷新结果页,我希望防止重复。

  • 问题内容: 我有一个看起来像这样的数据框: 它是使用以下代码创建的: 我要做的是根据预定义的列表对行(带有索引)进行排序。结果是: 我该如何实现? 问题答案: 你可以使用预定义的顺序设置指标像 但是,如果按字母顺序排列,则可以使用 如下所示,您需要将其分配给一些变量

  • 问题内容: 我想向包含标签的浏览器输出一行文本。呈现此效果时,DIV似乎会换行。如何在同一行的div标签中包含内容-这是我的代码。 我试图在这里整理一下。如何在一行上显示此内容? 问题答案: 该标签是块元素,造成这种行为。 您应该改用内联元素。 如果您 确实 要使用,请添加。(您也可以将其放入CSS规则中)

  • 我读了这个https://bugs.openjdk.java.net/browse/JDK-8102128,但我还没有在JavaFX 8的Api中找到一些东西。在TableView中没有防止重新排序的方法吗?

  • 问题内容: 每次我通过贝宝付款时,我的信息都会在数据库中捕获,但我想防止重复。那么我该如何解决呢?还是应该检查电子邮件重复项? 编辑 据我所知,pinnaclecart将uid设置为primary。所以将它设置为唯一不是“危险”吗? 问题答案: 名字和姓氏都很好,但是除了唯一之外,其他一切都没有。我认识几个与我同名的人,因此我猜想在这两列上建立唯一索引只会令人沮丧,而无济于事。但是,使我与众不同的