1

ユーザーポイントと日付を変更するためのUPDATE SQLステートメント(Dibiエンジンなど)があります。その一言が必要です。問題は、 SQL レベル (PHP ではない) の 1 つの SQL クエリでIF ステートメントを使用およびチェックする方法がわからないことです。

だから私が望むのは、paid_to IS NULLの場合、それは次のようになるということです:

dbIndex::query("UPDATE s3n_users SET points = %i, paid_to = DATE_ADD(paid_to, INTERVAL $points MONTH) WHERE id_user = %i", $points, $id_user)->result();

それ以外の場合、paid_to IS NOT NULLの場合は次のようになります。

dbIndex::query("UPDATE s3n_users SET points = %i, paid_to = DATE_ADD(CURDATE(), INTERVAL $points MONTH) WHERE id_user = %i", $points, $id_user)->result();

PHP でこれを解決することはわかっていますが、もちろん、SQL で 1 つのステートメントを実行する方が高速です。PHP では、NULL または NOT NULL をチェックする前に SELECT を使用する必要があったためです。さらに別のことをしなければならないのはなぜですか?

4

1 に答える 1

3
dbIndex::query("UPDATE s3n_users SET points = %i, 
    paid_to = IF(paid_to IS NULL,
        DATE_ADD(paid_to, INTERVAL $points MONTH),
        DATE_ADD(month, 1, GETDATE())) 
    WHERE id_user = %i", $points, $id_user)->result();

詳細については、 http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html#function_ifを参照してください。

于 2013-08-26T22:31:47.610 に答える