UPDATE messages set test_read =1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5, 5 ;
J'essaie d'utiliser cette requête pour mettre à jour un ensemble de 5 lignes en utilisant limit, mais mysql affiche une erreur .. Celui ci-dessous fonctionne
UPDATE messages set test_read =1
WHERE userid='xyz'
ORDER BY date_added DESC
LIMIT 5 ;
pourquoi le premier ne fonctionne pas?
Si vous devez vraiment le faire de cette façon, vous pouvez utiliser quelque chose comme ceci:
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
La documentation indique que toute instruction UPDATE avec la clause LIMIT est considérée comme non sûre car l'ordre des lignes affectées n'est pas défini: http://dev.mysql.com/doc/refman/5.1/en/replication-features- limit.html
Cependant, si "ORDER BY PK" est utilisé, l'ordre des lignes est défini et une telle instruction peut être enregistrée au format d'instruction sans aucun avertissement.