gpt4 book ai didi

php - 由于时间戳 now(),SQL 插入忽略不起作用

转载 作者:行者123 更新时间:2023-11-29 04:21:31 25 4
gpt4 key购买 nike

我正在努力防止这样的重复条目

INSERT IGNORE INTO myTable( `val_1`, `val_2`, `val_3`, `date` ) 
VALUES ( '$var_1', '$var_2', '$var_3', now() )

我想检查的值是 3 val_x 但因为 now() 将是一个唯一值,插入忽略不起作用。

我怎样才能不检查最后一个变量是否唯一?

注意:这有点像购物车,所以我不能使前 3 个值唯一。有一个 session 变量允许每个用户看到一个唯一的集合。

在此图中,前两行是重复的,因为它们属于同一个用户 session 。第三行不是重复的,因为它属于不同的用户 session

 +---------+-------+--------+
| session | var 1 | var 2 |
+---------+-------+--------+
| abc1234 | aaaaa | bbbbb |
+---------+-------+--------+
| abc1234 | aaaaa | bbbbb |
+---------+-------+--------+
| 5678def | aaaaa | bbbbb |
+---------+-------+--------+
| 5678def | aaaaa | ccccc |
+---------+-------+--------+

正如 paqogomez 所建议的那样,我从查询中删除了 now() 并更改了表格,但看起来我需要一个主键才能使 insert ignore 正常工作,但对于我的场景我不能使这 3 列唯一

错误 1062:键“var 1”的重复条目“aaaaa”

最佳答案

我建议将日期移到列的默认值中。

ALTER TABLE mytable CHANGE `date` `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

这样,您仍然可以在 PHP 中处理数据中的重复项。如果您尝试插入重复项,其他人建议的替代方案将导致数据库外键错误。

然后这个 sql 会工作并给出相同的结果:

INSERT IGNORE INTO myTable( `val_1`, `val_2`, `val_3` ) 
VALUES ( '$var_1', '$var_2', '$var_3' )

编辑:

您仍然需要一个唯一索引才能使其正常工作。查看@Gordon 的回答

关于php - 由于时间戳 now(),SQL 插入忽略不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com