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 の初心者ですが) 私には /should/ 動作するように見えます。SQL 5.5 を使用していますが、次のようなエラー メッセージが表示されます。

SQL 構文にエラーがあります。'WHERE NOT EXISTS (SELECT * FROM sldb_quest WHERE uuid = '0089dcea-' at line 1) の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

一意の識別子があればそれが可能になることはわかっていますが、データベースには大量の行が保存され、その多くは同一の値を持ち、唯一の一意の値は UUID になります。 quest_id を使用して、必要な特定の行を見つけます。uuid は「0089dcea-bf39-40f5-859e-d79bdc383f1b」のようになり、ユーザーごとに一意に生成されます。

私が間違っていることについてのポインタは非常に高く評価されます! どこかで見逃してしまった小さな詳細だと確信していますが、原因を見つけることができませんでした.

4

1 に答える 1

1

WHERE節はINSERTVALUESリストのある では無効です。を使用できます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."')

また、一意のキーをまだ持っていない場合は、作成することを強くお勧めします。

于 2012-12-06T18:00:44.603 に答える