Heim > Datenbank > MySQL-Tutorial > Hauptteil

Detaillierte Erklärung der tatsächlichen Öffnungsmethode von MySql nach Funktion gruppieren!

藏色散人
Freigeben: 2022-02-09 09:07:53
nach vorne
2552 Leute haben es durchsucht

In diesem Artikel erfahren Sie, wie Sie die MySql-Gruppenfunktion richtig öffnen. Ich hoffe, er hilft Ihnen weiter!

Bei der Verwendung der Gruppenfunktion zum Filtern der Ergebnismenge sind einige Probleme und Lösungen aufgetreten [Empfohlen: MySQL-Video-Tutorial]

1. Anwendungsszenarien

Es gibt zwei Tabellen

Article-Tabelle (Eins-zu-viele-Nachrichtentabelle) t_posts:
oid, posts_name
Nachrichtentabelle (viele-zu-eins-Artikeltabelle) t_comment:
oid, posts_id, msg_content, create_time

2. Anforderungsanalyse

Fragen Sie den neuesten Antwortinhalt jedes Artikels ab. 3. SQL-Schreiben im Einklang mit dem Folgenden)

select 
  tp.oid,
  tp.posts_name,
  tc.msg_content,
  tc.create_time
from t_posts tp 
left join t_comment tc on tp.oid = tc.posts_id
group by tp.oid having create_time = max(create_time)
Nach dem Login kopieren
Wenn Sie die obige SQL ausführen, werden Sie feststellen, dass eine große Anzahl von Datensätzen in der Ergebnismenge verloren geht und die Ergebnisse falsch sind. Nach der Abfrage der Daten wissen wir, dass MySQL vorliegt wird nach der Gruppierung ausgeführt, d. h. zuerst wird eine Gruppierung durchgeführt und dann gefiltert. Da jedoch mehr als zwei Nachrichtendatensätze vorhanden sind, verwendet die Ergebnismenge nach der Gruppierung nur die erste Nachricht jeder Nachricht als Datensatzinformation nach der Gruppierung Dieses Mal, wenn Sie „create_time = max(create_time)“ verwenden, dann ist „max (create_time)“ die maximale Zeit der aktuellen Gruppierung: 10.09.2019 und 09.09.2019 wird die Ergebnismenge verlieren

4. Transformieren Sie die SQL

, da sie weiß, dass sie nach der Gruppierung zusammengeführt wird. Die wiederholte Ergebnismenge ist die mit der kleinsten Zeilennummer. Können wir die SQL also wie folgt ändern??

<p>A有一个回复记录时间为: 2019-09-10   <br>A有一个回复记录时间为: 2019-09-11   <br>B有一个回复记录时间为: 2019-09-01   <br>B有一个回复记录时间为: 2019-09-09<br></p>
Nach dem Login kopieren

Nachdem ich es ausgeführt habe, stellte ich fest, dass es immer noch nicht funktioniert, was beweist, dass „Order by“ nach „Group by“ und „Having“ folgt Die gruppierten Ergebnisse? 5. Die ultimative modifizierte Version aber die Unterabfrage wird tatsächlich zuerst sortiert

Nach der Abfrage (Erklärung) wird festgestellt, dass die Reihenfolge der Unterabfrage optimiert wurde:

Verwenden Sie den Grenzwert 99999 in der Unterabfrage.

Verwenden Sie die Where-Bedingung in der Unterabfrage. create_time = (wählen Sie max(create_time) aus der t_comment-Gruppe nach OID aus)

select 
  tp.oid,
  tp.posts_name,
  tc.msg_content,
  tc.create_time
from t_posts tp 
left join t_comment tc on tp.oid = tc.posts_id
group by tp.oid having create_time = max(create_time)
-- 下面的是新增的sql
order by tc.create_time desc
Nach dem Login kopieren

Fertig

Zusätzliche Wissenspunkte:

Unterschied zwischen den Versionen mysql5.5 und mysql 5.7: Version 5.7+, wenn das Limit nicht verwendet wird, gruppieren nach wird die Reihenfolge optimieren bis

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der tatsächlichen Öffnungsmethode von MySql nach Funktion gruppieren!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage