0

このクエリは、where で複数のチェックを使用して DB テーブルを更新しています。問題は、その週と日にコンサルタント ID に対して欠落しているすべての行を挿入したいということです。

UPDATE agenda
SET comments = 1
WHERE  term_id = 31
  AND day IN ( 1, 3 )
  AND week IN ( 1, 3, 4 )
  AND consultant_id IN ( 1, 2, 3) 

たとえばconsultant_id=3 and week=1 which has no day=2、 データベースに を持つ行があり、 を持つ新しい行を挿入したいとしますconsultant_id=3 ,week=1, day=2 and comments=1。それを含む行 consultant_id=3 ,week=1, day=2 existが単にコメントを更新する必要がある場合。

ON DUPLICATE KEY この関連チケットを使用しようとしたこと しかし、問題は、すべてconsultant_idweekday、 が配列にあり、これら 3 つに基づいてコメントを更新する必要があることです。

どんな助けでも本当に感謝します。

4

2 に答える 2

0

1 つのクエリに含める必要がありますか?

解決策は次のとおりです(疑似コード):

$result = query("UPDATE agenda
    SET comments = 1
    WHERE  term_id = 31
       AND day IN ( 1, 3 )
       AND week IN ( 1, 3, 4 )
       AND consultant_id IN ( 1, 2, 3) ");
if (affected_rows($result) == 0) {
  // do insert query
}
于 2013-05-30T06:28:19.280 に答える
-1

クエリは正しいと思いますが、指定した例がテーブルを反映している場合、クエリは何も更新しません。

でテーブルを更新しますconsultant_id=3 ,week=1, day=2 and comments=1

クエリに次のステートメントを入れます。 AND day IN ( 1, 3 ) これは、日数を 1 日と 3 日だけに制限することを意味します。条件day=2を満たさないため、更新が機能しません。

新しいレコードを追加する場合は、insert代わりにステートメントを使用します。

于 2013-05-30T06:58:28.233 に答える