• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Chat Konversationen ordnen.

BDG

Mitglied
Hey Leute,

ich habe einen Chat, bei dem man bis jetzt immer direkt die user_id des Chat-Partners angeben muss.
Nun will ich, dass wie in Facebook und Whatsapp die Freunde angezeigt werden, mit den man zuletzt geschrieben hat.

Ich habe die Tabelle "messages" die so aufgebaut ist: "from" und "to" sind die user-id's, dann gibt es noch "date_time" und "content", welche ja selbst-erklärend sind.

Also für jede Nachricht die man schreibt wird ein neuer Eintrag in die Tabelle erstellt.

Jetzt muss ich ja ein Query erstellen, dass alle Nachrichten filtert, in denen ich enthalten bin. Dann muss ja irgendwie festgestellt werden, wenn ich mit Partner 7 schreibe, welches die letzte Nachricht war. Also vorher muss das irgendwie in Konversationen zusammengefasst werden. Und dann will ich als Ergebnis alle Konversationen in zeitlich geordneter Reihenfolge haben... Das ist irgendwie echt komplex und schwer :/ Könnt ihr mir da helfen?

Mit freundlichen Grüßen,

Basti
 
Werbung:
Also du hast einen Chat / eine Datenbank wo Nachrichten sind wo auch andere miteinander schreiben. Also wenn ich das jetzt richtig verstanden hab ist deine Datenbank so aufgebaut:
from | to | date_time | content

Dann könnte deine Datenbank Abfrage in etwa so aussehen


PHP:
SELECT * FROM messages WHERE from = '$myid' OR to = '$myid' ORDER BY date_time DESC LIMIT 10
Das würde die letzten zehn Einträge wo deine ID vorhanden ist ausgeben. Voraussetzung du hast deine Zeit als timestamp abgespeichert. Eine AO Id wäre auch nicht schlecht.

Jetzt kommt ja noch die Sache das du auch mit der einer Person die letzten 10 Nachrichten geschrieben haben kannst, das würde ich mit einer Schleife regeln.

Lg
 
Zuletzt bearbeitet:
Ja das Query um Nachrichten auszulesen ist auch nich so schwer :D Aber das komplexe kommt ja danach erst, und den Teil bekomme ich nicht hin. Ich muss ja erst alle Nachrichten mit Freunden auslesen (das schaff ich selber) und dann irgendwie in Konversationen zusammenfassen, neuste Nachricht, die zeit rausschreiben, und die user-id des Partners der Nachricht rausschreiben :/ Das ist hochkomplex schwierig, aber irgendwie muss das doch möglich sein. Schafft Facebook ja auch :D
 
Werbung:
So Luete, ich habe jetzt was passendes gefunden. Aber das ist noch ziemlich Buggy und ich versteh es auch nicht wirklich.
Ich nenne es den "Todes-query" :


PHP:
$db->query('SELECT * FROM '.$db->tb['messages'].'
    WHERE
    '.$db->msg['msg_id'].' = (select max('.$db->msg['msg_id'].') from '.$db->tb['messages'].' i where i.'.$db->msg['msg_to'].' = '.$db->tb['messages'].'.'.$db->msg['msg_to'].')
    AND (
        '.$db->msg['msg_to'].' = :user_id
        OR
        '.$db->msg['msg_from'].' = :user_id
    )');
$db->bind(':user_id', $user_id);
$result = $db->resultset();
if ( count($result) ) {
    $exist = true;
    foreach($result as $row) {
        $msg_from[]     = $row[$db->msg['msg_from']];
        $msg_to[]         = $row[$db->msg['msg_to']];
        $msg_text[]     = $row[$db->msg['msg_text']];
    }
}else{
    $exist = false;
}

So, das ist der Code. Ich weiß nicht wie er funktioniert, kann mir das jemand erklären? Also das von "WHERE ...msg_id (what?)". Das davor und danach ist ja einfach, aber was macht das dazwischen? Das select max und dieses "i where i." undso?

Das funktioniert auch nur halb, es listet die Konversationen zwar auf, aber komischerweise nur 3 Stück wenn es mehr sind :D
Kann mir damit jemand weiterhelfen? :O
 
Mir scheint Du solltest dir unbedingt erstmal MySQL-Grundlagen anschauen. Mit logischem Nachdenken kann man dann auch zu einer weniger komplexen Lösung kommen.

Mein Gedanke dazu wäre btw. der Einsatz eines UNION-Statements, von denen beide Teile a) die Daten der Nachrichten (das 1. von Freunden, das 2. von allen anderen) und b) ein Sortierungskriterium ausliefert. Das Ergebnis kann man dann primär nach dem Sortierungskriterium sortieren, sekundär nach dem Zeitpunkt des Versands.
 
JA ich verstehe ja auch fast alles vom Query und das ist auch nicht das erste mal, dass ich mit MySQL arbeite, aber dieses "i where i." hab ich noch nie gesehen. Hab auch gegooglet nach Variablen in Querys, habe aber nichts ähnliches gefunden.
Wo wird denn i gesetzt? Was macht dieses "i where i."?
 
Werbung:
Das Du nach so etwas googelst verdeutlich nochmal, dass Du dir unbedingt die Grundlagen anschauen solltest. Am Besten fängst Du mit dem MySQL-Handbuch selbst an, ist zwar zu großen Teilen auf englisch aber die erste Anlaufstelle. Es gibt auch im Netz noch viele andere Anleitungen für den Einstieg. Ohne den wirst Du nie verstehen wozu Aliase (das "i" von dem Du sprichst) und Einschränkungen wie "WHERE" verwendet werden.
 
Zurück
Oben