Soru mysql limitini kullanarak birden çok satırı güncelleştirin mi?


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

Limit kullanarak 5 satırlık bir kümeyi güncellemek için bu sorguyu kullanmaya çalışıyorum ama mysql bir hata gösteriyor ... Aşağıdaki aşağıdaki çalışıyor

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

İlk neden çalışmıyor?


28
2017-10-03 08:39


Menşei




Cevaplar:


Bunu gerçekten yapmanız gerekiyorsa, böyle bir şey kullanabilirsiniz:

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

53
2017-10-04 13:54



Çifte yuvalanmış seçime gerçekten ihtiyacınız var mı? Ms sql'de sadece "Kimlik numarası (SELECT TOP 5 ID)" date_added DESC'DEN SİPARİŞLERİNİ SEÇİN "gibi bir şey olurdu. - Alan Jackson
Evet, MySQL, seçtiği bir tabloyu güncellemenize izin vermez. Ekstra yuvalanmış seçim, sonuçları geçici bir tabloya kaydetmek için zorlar. - Lukáš Lalinský
Ne zaman istersen if you really must do it this way, kendi alanlarından birinin sırasına göre verilen sıralamaya göre kayıtların güncellenmesi için daha iyi bir alternatif olduğunu ima ediyor musunuz? - deed02392
Bu cevaba ilk baktığımda, kesinlikle işe yaramayacağını düşündüm, ama yaptı! Harika cevap ve teşekkür ederim. - Gareth Williams
MySQL 5.5, IN / ALL / ANY / SOME alt sorgusunda LIMIT'i desteklemez. - Ajay Gabani


http://bugs.mysql.com/bug.php?id=42415

Belgeleme, LIMIT yan tümcesiyle GÜNCELLEME ifadesinin olduğunu belirtir.   etkilenen satırların sırasına göre güvensiz kabul edilir   tanımlanmış:    http://dev.mysql.com/doc/refman/5.1/en/replication-features-limit.html

Ancak, "ORDER BY PK" kullanılırsa, sıraların sırası tanımlanır ve   böyle bir beyan herhangi bir açıklama yapmadan   uyarı.


5
2018-04-23 14:55