0

我的 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 服务器版本相对应的手册,以在第 1 行的 'WHERE NOT EXISTS (SELECT * FROM sldb_quest WHERE uuid = '0089dcea-' 附近使用正确的语法

我知道拥有唯一标识符会有所帮助,但数据库将存储大量行,其中许多行将具有相同的值,唯一的唯一值将是 UUID,然后我必须将其与quest_id 以找到我想要的特定行。uuid 看起来像这样:“0089dcea-bf39-40f5-859e-d79bdc383f1b”并且是为每个用户唯一生成的。

任何关于我做错了什么的指针将不胜感激!我敢肯定这只是我设法错过的一个小细节,但我没有找到原因。

4

1 回答 1

1

子句在带有列表的aWHERE上无效。您可以使用,但我不确定更新是否是您想要的。INSERTVALUESINSERT ... 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."')

如果您还没有唯一的密钥,我强烈建议您制作一个。

于 2012-12-06T18:00:44.603 回答