dedlfix: PHP MySQL 2 Tabellen Abfrage

Beitrag lesen

Tach!

In etwa so stelle ich mir das vor:

$sql = "SELECT members.id, members.name, members.pic FROM members,pm WHERE (pm.from=members.id AND pm.to='".$_SESSION["myid"]."') GROUP BY pm.datum DESC";

Natürlich sind jetzt noch doppelte Einträge vorhanden wenn ich DISTINCT verwende stimmt aber die Sortierung nicht mehr.

Wenn du dopplete Einträge mit DISTICT zu bekämpfen versuchst, ist das oftmals ein Zeichen dafür, dass der Join verbesserungswürdig ist oder du anderweitig eine zu große Datenmenge abgefragt hast.

Eine Einführung in Joins, besonders wenn du schon immer damit Probleme hast, sollte dir generell beim Verständnis helfen.

Problem hier ist auch, dass er nur die Benutzer anzeigt die man bereits geschrieben hat - was klar ist.

Bei einem (impliziten) Inner Join bekommst du nur Ergebnisse, wenn in beiden Tabelle Daten vorhanden sind. Outer Joins liefern auch die Daten der einen Tabelle, wenn die andere nichts hat.

Die Benutzer die man bereits geschrieben hat, sollen oben angezeigt werden. Und zusätzlich nach dem Datum (Letzte Nachricht).

Du willst also eigentlich von der pm-Tabelle nur das Datum der neuesten Nachricht haben. Dann frag einfach dieses ab, aber nicht über einen mit DISTINCT kleingeklopften Join sondern über eine korrelierte (correlated) Subquery.

SELECT members.zeug, (SELECT MAX(datum) FROM pm WHERE from = members.id AND to = :sessionid) datum FROM members ORDER BY datum

Außerdem ist es empfehlenswert, PDO (oder mysqli) zu verwenden, und dann die variablen Teile per Prepared Statement zu übergeben. Damit spart man sich das Zusammengestückel der Query und kann auch nicht die Maskierungen für den Kontextwechsel vergessen.

dedlfix.