我的SQL查询遇到了一些麻烦,我不断收到语法错误。
有问题的查询是:
INSERT INTO $db (uuid, quest, stage, completion, quest_id, dstart) VALUES ('".$avatar_key."','".$quest_name."','".$quest_stage."','".$qc."','".$quest_id."','".$date."') WHERE NOT EXISTS (SELECT *
FROM $db
WHERE uuid = '$avatar_key' AND quest_id = '$quest_id'
)
我要做的是检查表是否有一行,同时具有$ avatar_key和$ quest_id的确切值,如果这样的行不存在,那么我希望它插入一个新行
我收到一个错误,我似乎无法弄清楚如何解决;查询本身看起来(虽然我是一个SQL新手)是/应该/工作。我正在使用SQL 5.5,&这是我收到的错误消息:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 '不存在的地方附近(选择*) 来自sldb_quest 在第1行uuid ='0089dcea-'
我知道拥有唯一标识符会有所帮助,但数据库会存储大量行,其中许多行具有相同的值,唯一的唯一值是UUID,我必须匹配使用quest_id来查找我想要的特定行。 uuids看起来像这样:“0089dcea-bf39-40f5-859e-d79bdc383f1b”并为每个用户唯一生成。
任何关于我做错的指示都将非常感激!我确信这只是我在某个地方错过的一个小细节,但我找不到任何运气。
答案 0 :(得分:1)
WHERE
子句在INSERT
列表中无效VALUES
。您可以使用INSERT ... ON DUPLICATE UPDATE
,但我不确定更新是您想要的。
如果将uuid
(有或没有quest_id
)设置为唯一键,您可以尝试的最简单的方法是使用IGNORE
。
INSERT IGNORE INTO $db (uuid, quest, stage, completion, quest_id, dstart)
VALUES ('".$avatar_key."','".$quest_name."','".$quest_stage."','".$qc."','".$quest_id."','".$date."')
如果您还没有唯一的密钥,我强烈建议您制作一个密钥。