Php 不存在时的正确语法是什么
我试图防止MySQL表中出现重复条目。我试过插入忽略,但似乎不起作用。我相信这是因为我有一个自动递增列,因此没有两行是重复的 所以,我试着使用不存在的地方Php 不存在时的正确语法是什么,php,mysql,Php,Mysql,我试图防止MySQL表中出现重复条目。我试过插入忽略,但似乎不起作用。我相信这是因为我有一个自动递增列,因此没有两行是重复的 所以,我试着使用不存在的地方 $sql = "INSERT INTO testresults (ttime, resno, course, vid, playdate) VALUES (:ttime, :resno, :course, :vid, :playdate) WHERE NOT EXISTS (SELECT * FROM tempresults WHERE v
$sql = "INSERT INTO testresults (ttime, resno, course, vid, playdate) VALUES (:ttime, :resno, :course, :vid, :playdate)
WHERE NOT EXISTS (SELECT * FROM tempresults WHERE vid = :vid AND playdate = :playdate) LIMIT 1)";
但这又回来了
SQLSTATE[42000]: Syntax error or access violation: 1064
关于堆栈溢出的例子有很多,但它们似乎都希望插入的值来自SELECT语句;而我是从编程生成的值插入
我想我只需要对SQL语句稍加修改
谢谢 我认为
INSERT IGNORE
可以工作
你说
我相信这是因为我有一个自动递增列,因此没有两行是重复的
这是真的,但根据问题中的SQL所做的尝试,可以根据vid
和playdate
列来识别用于您目的的重复行
可以在这两列上添加唯一约束
ALTER TABLE testresults ADD UNIQUE unique_vid_playdate (vid, playdate)
然后,
INSERT IGNORE
将执行您希望它执行的操作。如果您没有唯一的约束,请使用此选择替换值:
INSERT INTO testresults (ttime, resno, course, vid, playdate)
SELECT :ttime, :resno, :course, :vid, :playdate
WHERE NOT EXISTS (SELECT * FROM tempresults WHERE vid = :vid AND playdate = :playdate)
无需使用LIMIT
,因为语句将返回最多1行。您是否希望将LIMIT 1
放在与SELECT
关联的括号内?然后删除最后的结束括号(和不匹配的括号)。对你的目标感到困惑。您将插入具有指定值的一行的语法与从另一个表复制多行的语法相结合。您想在此处执行哪项操作?请参阅,这可能有助于您不/不能使用WHERE
和插入…值(值列表)
查询;但您可以将其与一个INSERT…SELECT value\u列表一起使用,其中有…
query。我想在表中插入一行,但要确保它不是重复的行。表的模式包括字段uniq,它是一个自动递增字段