UPDATE messages set test_read =1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5, 5 ;
このクエリを使用して、制限を使用して5行のセットを更新しようとしていますが、mysqlでエラーが表示されています。以下のコードは機能しています
UPDATE messages set test_read =1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5 ;
なぜ最初のものが機能しないのですか?
本当にこの方法で行う必要がある場合は、次のようなものを使用できます。
UPDATE messages SET test_read=1
WHERE id IN (
SELECT id FROM (
SELECT id FROM messages
ORDER BY date_added DESC
LIMIT 5, 5
) tmp
);
http://bugs.mysql.com/bug.php?id=42415
ドキュメントには、影響を受ける行の順序が定義されていないため、LIMIT句を含むUPDATEステートメントは安全でないと見なされていると記載されています。 http://dev.mysql.com/doc/refman/5.1/en/replication-features- limit.html
ただし、「ORDER BY PK」を使用すると、行の順序が定義され、そのようなステートメントは警告なしにステートメント形式で記録されます。