Heim >Datenbank >MySQL-Tutorial >Wie kann ich mithilfe von MySQLs GROUP BY und ORDER BY die aktuellsten E-Mails von jedem Absender abrufen?
Detaillierte Erläuterung und Anwendung der MySQL-Klauseln GROUP BY
und ORDER BY
Beim Arbeiten mit Datentabellen in einer MySQL-Datenbank ist es wichtig, das Zusammenspiel der GROUP BY
- und ORDER BY
-Klauseln zu verstehen. Stellen Sie sich das folgende Szenario vor:
Sie müssen die Zeilen in der E-Mail-Tabelle nach der E-Mail-Adresse des Absenders gruppieren, mit dem Ziel, von jedem Absender die neueste E-Mail abzurufen. Allerdings die folgende Abfrage:
<code class="language-sql">SELECT `timestamp`, `fromEmail`, `subject` FROM `incomingEmails` GROUP BY LOWER(`fromEmail`) ORDER BY `timestamp` DESC</code>
führt zu falschen Ergebnissen. Es gruppiert E-Mails nach Absender, zeigt jedoch möglicherweise nicht die neuesten Themen in jeder Gruppe an. Die Ergebnisse können Folgendes anzeigen:
<code>fromEmail: [email protected], subject: hello fromEmail: [email protected], subject: welcome</code>
Und die tatsächlichen Daten enthalten:
<code>fromEmail: [email protected], subject: hello fromEmail: [email protected], subject: programming question fromEmail: [email protected], subject: welcome</code>
Lösung: Verwenden Sie eine Unterabfrage und die Funktion ANY_VALUE()
Um dieses Problem zu lösen, können Sie eine Unterabfrage in Kombination mit der Funktion ANY_VALUE()
verwenden:
<code class="language-sql">SELECT * FROM ( SELECT `timestamp`, `fromEmail`, ANY_VALUE(`subject`) AS `subject` FROM `incomingEmails` ORDER BY `timestamp` DESC ) AS tmp_table GROUP BY LOWER(`fromEmail`)</code>
In MySQL 5.7 und höher ermöglicht ANY_VALUE()
die Verwendung nicht aggregierter Spalten in einer GROUP BY
-Anweisung mit einer SELECT
-Klausel. Es wählt zufällig einen Wert aus jeder Gruppe aus und stellt so sicher, dass die Unterabfrage den neuesten Betreff für die E-Mail-Adresse jedes Absenders abruft.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von MySQLs GROUP BY und ORDER BY die aktuellsten E-Mails von jedem Absender abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!