molily: MySQL: Daten aus drei Tabellen zusammensuchen

Beitrag lesen

Hallo,

Alles soll in einem Select abgehandelt werden und ich dachte mir, dass müsste gehen und ein Extraselect für die Kommentarzahle ist nicht nötig.

erstens geht es unter den kriterien, die du gestellt hast nicht.

Wieso?

und zweitens in eine abfrage nicht immer besser als mehrere abfragen, insbesondere nicht in deinem fall. du gehst die sache zu kompliziert an, trennen den count() von der ersten abfrage. das bringt übersichtlichkeit und performance und vor allem es funktioniert auch.

Ja, soweit war ich schon, ich fragte mich eben nur, ob es auch mit einer Abfrage abgehandelt werden kann. Für solche Aufgaben scheinen mir Joins prädestiniert. Eine Anfrage kann ich übersichtlicher handhaben als mehrere, ich habe also PHP-Code eingespart.
Die Gesamtperformance habe ich nicht getestet, es stimmt aber, dass eine Abfrage an sich geringfügig langsamer ist als zwei, die letztlich dieselben Daten abfragen. Hinzu käme im Falle von zwei Abfragen die nötige Verarbeitung der ersten Abfrage und das Zusammenbringen der Daten, das bei der kombinierten Abfrage wegfällt (da habe ich die Kommentarzahl direkt im selben Datensatz). Insofern sehe ich hinsichtlich Performance keine klare Tendenz.

des weiteren vermute ich, ist dein group by nicht notwendig.

Wie meinst du das? Wenn ich COUNT() funktioniert hier nicht ohne GROUP BY, MySQL wird ein Fehler zurückgeben, nähme ich es einfach heraus.

es gibt ja laut definition keine gleichen msgid wenn ich mich nicht täusche. insofern kann er auch keine gleichen finden, nach denen er gruppieren könnte.

Ich verstehe nicht, was du meinst. Gleiche msgids finden sich wie gesagt in den Tabellen meldungen und kommentare, falls du darauf hinauswillst. Die Kommentare sind über die msgid mit den Meldungen verknüpft. Wie gesagt werden diese gleichen auch gefunden, die Kommentare mit gleicher msgid werden gezählt und durch den Join in die mit den Benutzerdaten gejointen Meldungs-Zeilen mit den jeweiligen msgids einsortiert.

Mathias