Quote:
Originally Posted by qooc
Danke für eure Antoworten.
Ich habe auch noch eine andere Lösung gefunden und zwar GROUP BY
meine Frage nun was ist besser?
GROUP BY oder DISTINCT ?
|
Ich antworte nur vom Handy, daher kann ich nicht groß Bilder machen.
Aber vielleicht reicht eine Erklärung:
Prinzipiell ist Group By und Distinct erst einmal nicht vergleichbar, da sie total unterschiedliche Ergebnisse (intern in MySql) erzeugen. Da man aber normalerweise die Ergebnisse wie sie bei einem Group By entstehen nicht verwenden/darstellen kann, werden sie so umgeändert, dass es so aussieht als wäre Group By und Distinct dasselbe.
Ganzgrob (ohne auf exakte Details zu achte) funktioniert Group By so:
Der Befehl "gruppiert" alle Einträge in der Tabelle zu (mal ganz vereinfacht gesagt) neuen Tabellen. Das heißt jede neue Tabelle, die erstellt wird beinhaltet dann alle dieselben Werte, die bei dem Group By Attribut angegegben wurden.
Stell dir das an Hand dieser Tabelle vor:
Quote:
Id | Geburtsort
0 | München
1 | Berlin
2 | Köln
3 | Berlin
|
Ein "Group by Geburtsort" würde jetzt erst einmal folgende 3 Tabellen (intern) erzeugen:
Tabelle 1:
Quote:
Id | Geburtsort
0 | München
|
Tabelle 2:
Quote:
Id | Geburtsort
1 | Berlin
3 | Berlin
|
Tabelle 3:
Quote:
Das heißt intern würdest du damit 3 Tabellen erzeugen und könntest mit "Having" jetzt Anfrage an die jeweils gruppierten Tabellen stellen. Willst du jetzt jedoch die Ergebnisse der Abfrage von SQL nach z.B. PHP bringen muss sich MySql eine Lösungsstrategie überlegen, immerhin kann man nicht einfach so mehrere Tabellen übergeben (und theoretisch ist das so auch nicht im Standard definiert).
Also entweder:
1. Group By ignorieren und alles zurückgeben oder
2. Immer nur das erste Element der Tabelle returnen
Beides hat Vor- und Nachteile intuitiver dürfte aber Lösung 2 sein, weil man Lösung 1 auch ohne Group By erreichen kann. Daher ist die Konvertierung in Lösung 2 logischer und auch implementiert.
Distinct hingegen geht alle Daten durch und nimmt immer nur den ersten Datensatz raus, wenn es mehrere gleiche gibt.
Die Wege sind also unterschiedlich, aber das Ergebnis (in PHP) ist dasselbe. Dennoch ist offensichtlich "Distinct" schneller und standardkonform, daher solltest du Distinct benutzen.