私が達成しようとしていることの明確化: 同じ電子メールで名前のないレコードがある場合は、「ユーザー名」を更新します。ユーザーがすでに名前を持っている場合は、何も変更しないでください
私は、すべてのユーザーが「購読者、起業家、または投資家」になることができる Web サイトを持っています。サブスクライバー (以前は電子メールのみを求めていた) がビジネス アイデアをアップロードすることを選択した場合、その人はおそらく以前と同じ電子メール アドレスを使用して、今回だけ名前を追加します。だから私は INSERT INTO をしたいのですが、電子メールがすでに存在する場合は名前を追加しますが、名前がまだない場合に限ります(他の人の詳細を簡単に上書きできないようにするため)。
私はここまで来ました:
mysql_query("
INSERT INTO users
(email, name)
VALUES
('" .$epost. "', '" .$namn. "')
ON DUPLICATE KEY UPDATE
name=VALUES(name) -->[if name == '', else do nothing...]
");
現在の名前が異なる場合は、新しい名前に置き換えます。
「フィールドが空の場合の重複更新時」を検索して見つけました: http://forums.aspfree.com/sql-development-6/on-duplicate-key-update-but-only-if-value-isn-t-482012 .html (マージ?)
重複キーの更新を条件とします(より近いですが、フィールドが空の場合にのみ、異なる場合は更新したくありません。)
http://bytes.com/topic/php/answers/914328-duplicate-key-update-only-null-values (入力が空白の場合..そうではありません)
http://boardreader.com/thread/Insert_on_duplicate_key_update_only_if_c_can8Xachr.html (このページのレイアウトに迷いました)
http://www.digimantra.com/tutorials/insert-update-single-mysql-query-duplicate-key/ (更新するだけです)
これは私が望んでいることのようなものかもしれないと思います(?)http://thewebfellas.com/blog/2010/1/18/conditional-duplicate-key-updates-with-mysqlそれは働く
このコード:
mysql_query("UPDATE users SET name='".$namn."'
WHERE email='".$epost."' AND name =''");
以前はnullだった場合にのみ名前を更新し、それが私が求めているものですが、電子メールがまだ存在しない場合は新しいレコードを挿入しません。
私のテーブル
だから私はこれを試しました:
mysql_query("
INSERT INTO users
SELECT email, 'victoria' FROM users
WHERE email='victoria@hejsan.se' ON DUPLICATE KEY UPDATE name = 'victoria'
");
そして私はこれを試しました:
mysql_query("
INSERT INTO users
SELECT email, 'yay' from users
WHERE email='victoria@hejsan.se'
ON DUPLICATE KEY
UPDATE name = values(name)
");
@Fluffehの回答から
しかし、何も起こりません。私は答えを誤解しましたか?
誰かがすでにアカウントを持っている場合は、パスワードも既に持っているはずなので、パスワードを確認するように依頼し、電子メールを挿入して確認するときに AJAX 呼び出しを行うようにします。電子メールがすでに登録されている場合:)これはもはや問題ではなく、それが私が使用する解決策だと思います. !)