0

クエリには少しジレンマがあります。コードを最適化するために、PHPでロジックをできるだけ少なくし、MySQLにほとんどの処理を任せたいと思います。

これが私が持っているものです。たとえば、10個のキーを持つ配列があります。各キーは、新しい配列にいくつかの値を差し控えます。各値は、データベーステーブルの行を表します。

私のデータベーステーブルに6つの列があるとしましょう。最初のものは自動インクリメントのプライマリです。列2、3、および4は一意である必要があります。列5はTEXT表現であり、一意であってはなりません。列6はINT(1)であり、0または1のいずれかです。

これで、テーブルにデータを挿入するときに、これを使用しますINSERT INTO mytable (col2, col3, col4, col5, col6) VALUES ('$col2','$col3','$col4','$col5',1) ON DUPLICATE KEY UPDATE col5 = '$col5', col6 = 0; 。これは完璧に機能しますが、必要なことを実行できません。

同じ配列をもう一度送信しますが、key3、col5行の場合、データを別の行に変更します。そのキーのcol6のみを0に更新します。残りは1のままである必要があります。これで、まったく同じデータで更新されたとしても、すべての行が更新されます。

したがって、必要なのは、col5が現在保存されている値と異なる場合にのみcol6を更新することです。どうやってやるの?

4

1 に答える 1

4

IFの使用

    INSERT INTO mytable (col2, col3, col4, col5, col6) VALUES
 ('$col2','$col3','$col4','$col5',1)
 ON DUPLICATE KEY UPDATE col5 = '$col5', col6 = IF(col5 != '$col5', 0, col6);
于 2011-02-17T12:07:52.980 に答える