nach Paaren sortieren

Nighel123

Neuer Benutzer
Beiträge
4
Hi,

ich habe eine Tabelle "Nachrichten" der Form

Abs: Empf: Text: Datum
Nickel | Lisett | bla bla bla | 4.12.1991
Tom | Nickel | bla bla bla | 3.10.1991
Lisett | Nickel | bla bla bla | 2.10.1991
Nickel | Lisett | bla bla bla | 15.9.1991
Tom | Nickel | bla bla bla | 3.9.1991
Nickel | Tom | bla bla bla | 1.9.1991

Um einen chat darzustellen würde ich nun gerne die Tabelle aufspalten in "Gesprächspartner"
d.h. in ein array oder mehrere aufteilen mit den Zeilennamen

Lisett: "Nickel und Lisett" unterhalten sich:
Nickel | Lisett | bla bla bla | 4.12.1991
Lisett | Nickel | bla bla bla | 2.10.1991
Nickel | Lisett | bla bla bla | 15.9.1991

Tom: "Nickel und Tom" unterhalten sich:
Tom | Nickel | bla bla bla | 3.10.1991
Tom | Nickel | bla bla bla | 3.9.1991
Nickel | Tom | bla bla bla | 1.9.1991

Wie mache ich das am besten?

Grüße Nighel
 
Zuletzt bearbeitet:
Werbung:
Ich würde es nun gerne hinbekommen die Tabelle

Dieser Satz kein Verb.

Aber vielleicht hilft ja schon dies:

Code:
test=*# select * from nighel ;
  abs  |  emp  | content
--------+--------+---------
 tom  | nickel | bla
 lisett | nickel | bla
 nickel | lisett | bla
 tom  | nickel | bla
 nickel | tom  | bla
(5 Zeilen)

test=*# select * from nighel order by greatest(abs, emp);
  abs  |  emp  | content
--------+--------+---------
 lisett | nickel | bla
 nickel | lisett | bla
 tom  | nickel | bla
 tom  | nickel | bla
 nickel | tom  | bla
(5 Zeilen)
 
Das hab ich doch oben schon ergänzt. Ich will es in die zwei kleineren Tabelle aufteilen.

Diese kleineren Tabellen könnten etwa in den Zeilen eines arrays stehen
 
Du willst die Tabelle ein kleinere aufteilen? Das macht keinen Sinn. Da kommen immer wieder dann neue Tabellen dazu, nur wenn 2 sich unterhalten. Völlig kaputt.

Ansonsten kannst Du das bei der Abfrage ja ermitteln, wer mit wem kommuniziert hat:

Code:
test=*# select * from nighel ;
  abs  |  emp  | content
--------+--------+---------
 tom  | nickel | bla
 lisett | nickel | bla
 nickel | lisett | bla
 tom  | nickel | bla
 nickel | tom  | bla
(5 Zeilen)

test=*# select greatest(abs, emp) || ' und ' || least(abs,emp) as wer_mit_wem, *, row_number() over (partition by greatest(abs, emp) || ' und ' || least(abs,emp)) from nighel order by greatest(abs, emp);
  wer_mit_wem  |  abs  |  emp  | content | row_number
-------------------+--------+--------+---------+------------
 nickel und lisett | lisett | nickel | bla  |  1
 nickel und lisett | nickel | lisett | bla  |  2
 tom und nickel  | tom  | nickel | bla  |  1
 tom und nickel  | tom  | nickel | bla  |  2
 tom und nickel  | nickel | tom  | bla  |  3
(5 Zeilen)

Ich habe jetzt nicht die Datumsspalte ergänzt (Hint: ich lese nicht den ganzen Thread jedes mal neu durch, ob da evtl. der Fragesteller Dinge noch ergänzt hat...), nach der könntest du im over(...) - Teil der row_number() - Funktion noch sortieren - wenn MySQL das denn könnte. In der Applikation kannst Du immer dann, wenn bei row_number eine 1 kommt, quasi einen neuen Abschnitt ausgeben.
 
Du willst die Tabelle ein kleinere aufteilen? Das macht keinen Sinn. Da kommen immer wieder dann neue Tabellen dazu, nur wenn 2 sich unterhalten. Völlig kaputt.

Sorry ich habe mich wohl missverständlich ausgedrückt. Ich meine ich will die Tabelle die ich aus der mysql datenbank-abfrage erhalte, innerhalb meines php Programms (also nicht innerhalb der Datenbank) aufteilen in arrays oder ein Array. Das was du gepostet hast sieht schonmal so ähnlich aus. Was ich konkret meine ist die Tabelle auf die Form eines Arrays $Gesräch mit diesem inhalt zu bringen:

$Gesräch["Lisett"] = array("bestehend aus alles Gesprächen von Nickel und Lisett nach Datum sortiert")
$Gesräch["Tom"] = array("bestehend aus alles Gesprächen von Nickel und Tom nach Datum sortiert")

hierbei ist "Nickel" nicht wichtig, weil das quasi der eingeloggte benutzer sein soll.

(Hint: ich lese nicht den ganzen Thread jedes mal neu durch, ob da evtl. der Fragesteller Dinge noch ergänzt hat...)

kein ding, ich dachte nur das ich was ergänzt habe wäre aus meinem vorherigen thread hervorgegangen in dem ich geschrieben hatte, dass ich zu früh auf den Button "posten" gekommen bin :)

Mit freundlichen Grüßen Nickel
 
Werbung:
aso.

Code:
test=*# select greatest(abs, emp) || ' und ' || least(abs,emp)  as wer_mit_wem, content from nighel order by greatest(abs, emp);
  wer_mit_wem  | content
-------------------+---------
 nickel und lisett | bla
 nickel und lisett | bla
 tom und nickel  | bla
 tom und nickel  | bla
 tom und nickel  | bla
(5 Zeilen)

test=*# select wer_mit_wem, array_agg(content) from (select greatest(abs, emp) || ' und ' || least(abs,emp)  as wer_mit_wem, content from nighel order by greatest(abs, emp)) foo group by 1;
  wer_mit_wem  |  array_agg   
-------------------+---------------
 tom und nickel  | {bla,bla,bla}
 nickel und lisett | {bla,bla}
(2 Zeilen)

test=*# select wer_mit_wem, string_agg(content, ',') from (select greatest(abs, emp) || ' und ' || least(abs,emp)  as wer_mit_wem, content from nighel order by greatest(abs, emp)) foo group by 1;
  wer_mit_wem  | string_agg  
-------------------+-------------
 tom und nickel  | bla,bla,bla
 nickel und lisett | bla,bla
(2 Zeilen)

test=*#

was passendes dabei?
 
Zurück
Oben