Dazugehörige Messages suchen

Drrichardfahrer

Well-known member
ID: 207405
L
20 April 2006
7.060
691
Für meine kleine Klassen-Homepage habe ich begonnen, ein einfaches Konversations-Script zu proggen. Die User haben die Möglichkeit sich gegenseitig Nachrichten zu schicken, die dann beim Aufruf in Form eines Chats erscheinen...

Prinzipielle Speicherung in der DB:
message_id | user_id | ... | message_last

In der message_last steckt die message_id drinnen, auf die quasi geantwortet wurde. Wenn eine neue Message erstellt wurde, ist hat sie den Wert 0.

Wie kann ich nun alle in einer Schleife am Komfortabelsten aufrufen? Er soll quasi mit der kleinsten message_id von dem Gespräch beginnen und sich dann raufhanteln bis halt zur letzten Antwort...

Also irgendwie so SELECT ... WHERE message_last = $current_messageid ...und das halt in einer Schleife...
 
Uff, das würde ich nochmal überdenken. So brauchst Du ja n Datenbankabfragen für n Antworten.

Wenn Du allerdings zu "message_last" noch "message_first" pflegst als erste Nachricht einer Unterhaltung, könntest Du alle n Antworten auf einen Rutsch in einer einzigen Datenbankabfrage mit geringem Overhead auslesen.
 
Wenn du dir nicht gemerkt hast, welche Tupel zu einer "Konversation" gehören, musst du dich durchhangeln. Wird der DB nicht wirklich gefallen.

Interessant für dich könnte dieser Thread sein:
https://www.klamm.de/forum/f64/php-mysql-vern-nftiges-refsystem-142162.html
Nicht täuschen lassen, weil es da um Refebenen geht. Ob die Beziehung "werber->ref" oder "ursprungsnachricht->antwortnachricht" heißt, spielt keine Rolle.

Sinnvoll wäre an deiner Stelle, eine "Konversations-ID" einzuführen. Eine ID, die

  • neu vergeben wird, wenn du einen neuen Datensatz mit message_last = 0 erstellt
  • die denselben Wert wie einer anderer Datensatz x hat, immer dann, wenn x.message_last = message_id is.
Eine Konversation rufst du dann einfach ab, indem du alle Messages mit derselben Konversations-ID holst. In PHP kannst du dann mittels message_last die Messages sortieren.
 
Aus dem ersten Posting geht nicht hervor ob du Konversationen (die evtl. auch mit mehr als 2 Teilnehmern stattfanden) oder Dialoge nur zwischen zwei Usern anzeigen willst.

Im ersten Fall ist die Einführung einer KonversationsID sinnvoll.

Woher soll denn aber, letzteren Fall vorausgesetzt, das Script wissen das eine neu begonnene Konversation bereits eine Historie besitzt? Diese Prüfung müsste im Eingabeformular durchgeführt werden.

Ähm...
Wenn die KonversationsID sich aus allen beteiligten UserIDs zusammensetzt gehts bei beidem.