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

Staram się korzystać z tej strony internetowej, aby zaktualizować zestaw 5 wierszy przy użyciu limitu ale mysql zilustrowano error..The jeden poniżej pracujeaktualizacja wielu wierszy za pomocą limitu w mysql?

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

dlaczego pierwszy nie działa?

Odpowiedz

53

Jeśli naprawdę musi zrobić to w ten sposób, można użyć coś takiego:

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

Czy naprawdę potrzebujesz opcji podwójnie zagnieżdżonej? W ms sql będzie to po prostu coś w stylu "Where id in (SELECT TOP 5 id FROM messages ORDER BY date_added DESC)" –

+19

Tak, MySQL nie pozwala na aktualizację tabeli, z której wybierze. Dodatkowe zagnieżdżone zaznaczenie zmusza do zapisania wyników w tabeli tymczasowej. –

+2

Kiedy pytasz "czy naprawdę musisz to robić w ten sposób", czy sugerujesz, że istnieje lepsza alternatywa dla aktualizacji rekordów na podstawie rangi określonej przez kolejność jednego z jej pól? – deed02392

Powiązane problemy