0

PHP と MySQL を使用すると、次のようなクエリが作成されます。

UPDATE mytable 
   SET status='$newstatus' 
 WHERE (col1='$col1[0]'AND col2='$col2[0]') 
   OR (col1='$col1[1]'AND col2='$col2[1]') 
   OR (...);

更新前に、これらの各行の現在の「ステータス」を実際に記録する必要があります。この前に別の SELECT を実行する必要がありますか、それとも 2 つのクエリを組み合わせることができますか?

4

3 に答える 3

1

Mysql には節がありませんOUTPUT。更新する前にステータスを読み取るか、値をOLD.status他のテーブルに格納するトリガーを作成する必要があります。

于 2012-09-04T16:33:12.780 に答える
1

このクエリからは取得できません (影響を受ける行の数しか取得できませんが、それだけです)。それが必要な場合は、まず次のSELECTような条件で行う必要があります。

SELECT `id` FROM `mytable`
WHERE (`col1`='$col1[0]' AND `col2`='$col2[0]')
   OR (`col1`='$col1[1]' AND `col2`='$col2[1]')
   OR (...)

そして、取得したsUPDATEを使用して行います。現在の句を使用することはお勧めしません。それまでの間 (との間) db コンテンツが変更される可能性があるため、編集した別の行を更新する可能性があります。または、テーブル ロックを使用します (ただし、ここでは意味がないと思います)。WHEREidUPDATEWHERESELECTUPDATESELECT

于 2012-09-04T16:23:55.737 に答える
0

単一のクエリで行を更新し、更新前に現在のステータスを記録することはできません。

「テーブル」と同じスキーマにタイムスタンプを加えた「ログテーブル」を用意することをお勧めしますが、バージョン管理システムのように、履歴データ、単一の時点での行のステータスのみを保存します。

例:

テーブルユーザー: ID、ユーザー名、電子メール、電話番号

テーブルUserLog : ID、ユーザー名、電子メール、電話番号、タイムスタンプ

したがって、テーブル User の行を更新する前に、まず次のように SELECT と INSERT を実行します。

insert into UserLog
select Id, Username, Email, Telephone, Now()  from User where Id=$Id
于 2012-09-04T16:41:39.647 に答える