mysql: die neuesten User-Nachrichten

sipoh

Erfahrenes Mitglied
Hallo,

ich möchte gerne eine Übersicht für den jeweiligen Benutzer schaffen, in der er sieht, mit welchem Benutzer er geschrieben oder von welchem Benutzer er eine Mitteilung bekommen hat.
In der Übersicht wähle ich dazu aus der Datenbank alle Einträge, die die eigene User-ID entweder im Feld Empfänger oder Sender hat.

PHP:
SELECT 
		id,
		an, 
		von,
		zeit,
		readed
	FROM 
		message
	WHERE 
		deleted_by_an = '0'
		AND
		(
		von ='" . $_SESSION['user'] . "' 
		OR 
		an = '" . $_SESSION['user'] . "' 
		)
	Group By (if(an > von,  von, an))
	       , (if(an > von, an, von))
	Order BY zeit DESC

Das funktioniert soweit auch. Nur in manchen Fällen wird nicht die neueste Message-ID genommen. In der Konsequenz bedeutet das, dass ich hier nicht z.B. farblich markieren kann, ob hier eine neue Nachricht oder nicht vorliegt.

Wie kann ich eine Konversation zwischen zwei Benutzern so gruppiert auslesen, dass die neueste message-id zurück kommt?


idvonan
11213
21312
31214
41314
 
Du hast ein GROUP BY auf 2 Ausdrücke. Im SELECT hast du aber viel meghr und andere Felder. Das bringt gar nix.
Leider ist MySQL nicht konsequent und gibt in dem Fall keinen Fehler aus sondern gruppiert einfach nach allem. Darum kannst du den GROUP BY in dieser FOrm gleich weglassen, denn GROUP BY nach ID bringt nun wirklich nix.

Warum sortiertst du nicht einfach nach der id?
 
D.h. SELECT * FROM message WHERE deleted_by_an = 0 AND (an = x OR von = x) AND MAX(id)

Dann bekomme ich doch aber nur eine - die neueste - Konversation...
 
Doch, es ist eine eindeutige Zahl.

SQL:
SELECT
		id,an,von,zeit,readed
	FROM
		message
	WHERE
		deleted_by_an = '0'
		AND
		(
		von ='" . $_SESSION['user'] . "' 
		OR 
		an = '" . $_SESSION['user'] . "' 
		)
	ORDER BY id DESC


Das Resultat ist nun (angenommen, ich bin User 13):

Eine Liste mit den IDs 1,2 und 4

1 und 2 müsste aber gruppiert werden, da 2 eine Antwort auf 1 ist. Somit müsste das Resultat wie folgt aussehen:

1,4

Wenn 4 (User-14) antwortet (id 5) müsste das Resultat sein:
1,5
 
Zuletzt bearbeitet von einem Moderator:
Jetzt gibt es eine Konversation-ID :)

Aber gleiches Problem:

Ich bekomme die Ausgabe zwar gruppiert, es wird aber nicht das Datum der letzten Mail angezeigt.

edit:
Läuft. Danke...
 
Zurück