0

PHPスクリプトからMySQLデータベイトに条件付きINSERTを作成しようとしています。次のSQL構文はphpMyAdminで機能しますが、私のPHPスクリプトでは機能しません。

INSERT INTO profiles (id, firstname)
SELECT "22","John" from profiles
WHERE NOT EXISTS (
SELECT * FROM li_profiles
WHERE li_p_firstname = "John"
)

(「id」は主キーであり、「firstname」はキーまたは一意ではないことに注意してください)

問題の一部である可能性がある奇妙なことは、phpMyAdminでそのSQLを実行すると、「動作」している間(つまり、ID「22」と名「John」で新しいレコードが追加される)、次のようになります。警告:「#1062-キー1のエントリ「22」が重複しています」しかし、テーブルにはIDが22の前のエントリがありませんでした。?? !!

どうしたの?

4

3 に答える 3

0

SELECT を VALUES に変更

INSERT INTO profiles (id, firstname) VALUES("22","John") FROM profiles WHERE NOT EXISTS ( SELECT * FROM li_profiles WHERE li_p_firstname = "John" )

また、自動インクリメント値を使用している場合は、次の値を指定する必要があります。また、整数の場合は、文字列 ("22") ではなく整数 (22) を指定します。

于 2010-12-19T03:37:28.877 に答える
0

profilesテーブルの各行に新しい行を挿入しているため、iD のエントリが重複します。テーブルのすべての行で、profilesテーブルに John はいませんli_profiles。あなたは試すかもしれません

INSERT INTO profiles (id, firstname)
    SELECT "22","John" from profiles
        WHERE NOT EXISTS (SELECT * FROM li_profiles
                              WHERE li_p_firstname = "John")
        LIMIT 1;

これにより、重複の問題が解消されます(機能する場合は、申し訳ありませんが、自分で確認していません)。

于 2010-12-19T09:15:41.620 に答える
0

私は別の方法でそれを理解しました。(HAVINGステートメントは遅いと言われたので、それが最善の方法かどうかはわかりません...しかし、それが私が機能する唯一の方法です。)

INSERT INTO profiles (id,firstname)
SELECT 22,'John'
FROM li_profiles
WHERE firstname = 'John'
HAVING COUNT(*) = 0;
于 2010-12-19T15:13:43.093 に答える