Mysql: Update-Bereich der meisten aktuellen Datensatz
Ich versuche zu aktualisieren, die neuesten Datensatz, in dem Namen ist John
(John
hat mehrere Datensätze, aber unterschiedlicher ID), aber ich scheine mich in einer Zwickmühle. Was ist falsch mit meiner Abfrage?
UPDATE messages_tbl SET is_unread=1
WHERE ReceiveTime = (SELECT MAX(ReceiveTime) FROM messages_tbl WHERE name='John')
Gibt es eine bessere Möglichkeit, so etwas zu tun?
InformationsquelleAutor enchance | 2013-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem man beitreten kann beides und update durchführen auf der Grundlage der Bedingung.
Ohne die
WHERE
Zustand. Es werden alle update die Spalteis_unread
für den neuesten Eintrag.Error Code : 1064
.was ist die vollständige Fehlermeldung?
Query : update messages s1 set is_unread=1 inner join (SELECT Name, MAX(ReceiveTime) max_time FROM messages group by Messa... Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'inner join (SELECT Name, MAX(ReceiveTime) max_time FROM messages group' at line 2
yep, sorry. versuchen Sie, meine aktualisierte.
Genial! Tun Sie etwas dagegen, zu erklären, warum das andere nicht funktioniert hat? Ich unkommentiert die
WHERE
so kann ich bestimmte Zeilen und es noch funktionierte. 🙂InformationsquelleAutor John Woo
Sie könnten versuchen, mit
BESTELLEN
undLIMIT
.Versuchen Sie dies:
Diese Abfrage aktualisieren Sie die Zeilen in der Reihenfolge der höchsten (neuesten)
ReceiveTime
auf die niedrigste (älteste)ReceiveTime
. In Verbindung mitLIMIT
nur die jüngstenReceiveTime
verändert.Kein problem, wollte nur sichergehen, dass meine Antwort war immer noch relevant für deine Frage :).
InformationsquelleAutor Aiias