2016-05-03 10 views
0

Ich versuche, ein Diskussionssystem zu erstellen, Nachrichten zwischen zwei Benutzern anzuzeigen, die nach Zeit wie das Bild mit SQL, zum Beispiel, wenn Benutzer 10 seine Nachrichten mit Benutzer 45 sehen möchten, das ist meine Tabellenstruktur:Nachricht Diskussion Abfrage

Nachrichten (ID (PK), Absender_ID (FK_USER), Empfänger_ID (FK_USER), Betreff, Inhalt, created_at, updated_at);

Ich habe versucht, diese SQL-Abfrage, aber es zeigt nicht, was ich will:

select s.id, 
     s.subjet, 
     d.source_id as `source`, 
     d.id, 
     d.subject 
from messages s, 
     messages d 
where s.destination_id=d.source_id 
    and d.source_id=s.destination_id 
    and s.source_id=202 
order by created_at asc; 

Example

+0

in Ihre Tabellenstruktur Sie haben keine Spalte namens 'destination_id' oder' source_id' ?? –

+0

ist das selbe (destination_id => receiver_id und source_id => sender_id) @pratikgarg hoffe du findest eine Lösung für diese –

Antwort

1

Wenn ich richtig Ihre Tabellenstruktur und Anforderung verstehen, Sie so etwas wie unten probieren können -

SELECT * 
    FROM MESSAGES 
WHERE SENDER_ID IN (10, 45) 
    AND RECEIVER_ID IN (10, 45) 
ORDER BY CREATED_AT 

Oder so -

SELECT * 
    FROM MESSAGES 
WHERE (SENDER_ID = 10 AND RECEIVER_ID = 45) 
    OR (RECEIVER_ID = 10 AND SENDER_ID = 45) 
ORDER BY CREATED_AT 

Standardmäßig erfolgt die Bestellung in ASC-Mode, so dass das nicht erwähnt werden muss.

+0

es funktioniert für mich –

1

Ich denke, Sie wählen Fall benötigen (i ganze Spalte für Demo Endivie haben)

select s.id, 
    case s.sender_id when 202 then s.subject else '' end, 
    case s.receicer_id when 202 then s.subject else '' end, 
    s.subject, s.content, s.created_at 
from message s 
where s.sender_id = 202 
order by s.created_at ASC 
+0

Es gibt einen Syntaxfehler irgendwo in deinem Code Ich kann es nicht finden (ich überprüfe es aber kann finde es nicht) –

+0

Ich habe update die Antwort zu viel = – scaisEdge

+0

Sie haben wo Bedingung auf sender_id = 202. dann wie receiver_id (zweite case-Anweisung) wird der gleiche Wert>? –