2009-10-03 9 views
28
UPDATE messages set test_read =1 
     WHERE userid='xyz' 
     ORDER BY date_added DESC 
     LIMIT 5, 5 ; 

Je suis en train d'utiliser cette requête pour mettre à jour un ensemble de 5 lignes en utilisant la limite, mais mysql affiche un error..The celui ci-dessous travaillemettre à jour plusieurs lignes en utilisant la limite dans mysql?

UPDATE messages set test_read =1 
     WHERE userid='xyz' 
     ORDER BY date_added DESC 
     LIMIT 5 ; 

pourquoi le premier ne fonctionne pas?

Répondre

53

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 
); 
+1

Avez-vous vraiment besoin de la sélection double imbriquée? Dans ms sql ce serait juste quelque chose comme "Où ID dans (SELECT TOP 5 id FROM messages ORDER BY date_added DESC)" –

+19

Oui, MySQL ne vous permet pas de mettre à jour une table qu'il sélectionne. Le select imbriqué supplémentaire l'oblige à enregistrer les résultats dans une table temporaire. –

+2

Lorsque vous demandez «si vous devez vraiment le faire de cette façon», suggérez-vous qu'il existe une meilleure alternative à la mise à jour des enregistrements en fonction d'un classement donné par l'ordre d'un de ses champs? – deed02392

Questions connexes