2017-10-24 15 views
1

私は次のようにして、blogをフォローしようとしています。UPDATE、IF、INSERT INTOステートメントを使用して、データを2回も渡さないことを確認しています。MySQLのUPDATE、IF、INSERT INTOステートメント

これはPHP用ですのでご注意ください。

$query = "UPDATE 
      " . $this->table_name2 . " 
     SET 
      batch = :batch, 
      created = :created 
     WHERE 
      id = :id 
     IF row_count() = 0 
     INSERT INTO " . $this->table_name2 . " 
     SET 
      id=:id, 
      batch=:batch, 
      created=:created"; 

を次のように私が持っている文です。しかし、私の戻り値は常にバックとして偽来て、問題がどこにあるか私にはわかりません。

私は文の最初の半分をしようとした場合、それは情報を更新します。

$query = "UPDATE 
      " . $this->table_name2 . " 
     SET 
      batch = :batch, 
      created = :created 
     WHERE 
      id = :id 
そして、私は文の後半をしようとした場合、それは情報を挿入します。

 INSERT INTO " . $this->table_name2 . " 
     SET 
      id=:id, 
      batch=:batch, 
      created=:created"; 

私はしないでくださいこれまでの検索の後で助けを見つけると、何とか私のIFステートメントが正しくないかもしれないと感じますが、ドキュメント内のIF row_count() = 0に関する情報も取得しません。

+0

SQLステートメントの一部としてではなく、ストアドプロシージャでのみ使用できる場合は、 – JochenJung

+0

@ JochenJung O ok、私はそれを学ばなければならないことがあります。あなたが気にしないなら、私が使っている代替声明はどれだけ速いでしょうか? –

+0

insert文の重複キー更新版を探している可能性があります。 –

答えて

1

IF文は、ストアドプロシージャでのみ使用できます。

idは、主キー(または一意)である場合、これはあなたのために働く必要がありますに:

INSERT INTO " . $this->table_name2 . " 
     SET 
      id = :id, 
      batch = :batch, 
      created = :created 
ON DUPLICATE KEY UPDATE 
      batch = :batch, 
      created = :created 

これはまだ出ていないIDの、唯一のINSERT文を実行します。すでに存在する場合は、UPDATE部分を実行します。

+0

これはまさに私が探していたものです、ありがとうございます! –

+0

こんにちはJochenJung、私はちょうど最初の 'created =:created'の後に二番目の' created =:created'の後に引用符を変更して動作させました。よろしくご連絡ください –

+0

あなたは正しい、彼らはそこに属していません。ちょうど私の答えにそれを修正 – JochenJung

関連する問題