2012-04-04 3 views
1

Ich habe ein grundlegendes Nachrichtensystem eingerichtet und ich benutze die gleiche Abfrage, um gesendete und empfangene Nachrichten anzuzeigen. Es funktioniert sehr gut, aber ich muss das fbook-Feld für exp und dest bekommen. Ich dachte daran, zwei Abfragen zu erstellen und eine zu verwenden, wenn der Benutzer die Nachricht gesendet hat, die er anzeigt, und die andere Abfrage verwendet, wenn die Nachricht empfangen wurde, aber vielleicht gibt es einen besseren Weg.Mysql-Abfrage für das Messaging-System. Ein kleiner Fehler, den ich nicht herausfinden kann

+-----+------+------+----------+----------------+---------------------+------+ 
| id | exp | dest | message | msg_title  | timestamp   | view | 
+-----+------+------+----------+----------------+---------------------+------+ 
| 114 | 243 | 245 | From 243 | Message to 245 | 2012-04-04 09:26:52 | 0 | 
+-----+------+------+----------+----------------+---------------------+------+ 

Abfrage

SELECT a.*, b.fbook FROM messages a 
          JOIN users b ON a.exp=b.id 
          WHERE a.id = 114; 

Tabelle Benutzer

+------------------------+--------------+------+-----+---------------------+----------------+ 
| Field     | Type   | Null | Key | Default    | Extra    | 
+------------------------+--------------+------+-----+---------------------+----------------+ 
| id      | int(11)  | NO | PRI | NULL    | auto_increment | 
| username    | varchar(50) | NO |  | NULL    |     | 
| fbook     | bigint(64) | YES |  | NULL    |     | 
+------------------------+--------------+------+-----+---------------------+----------------+ 
+0

Warum 'gibt es WHERE a.id = 243" ;' doppelte Anführungszeichen am Ende ? – safarov

+0

Tippfehler, das ist eigentlich durch eine Variable eingestellt Ich habe es nur manuell für die Frage – Ciprian

Antwort

2

Sie wollen so etwas tun:

SELECT a.*, b.fbook AS `exp-fbook`, c.fbook AS `dest-fbook` 
FROM messages a 
JOIN users b ON a.exp=b.id 
JOIN users c ON a.dest=c.id 
WHERE a.id = 243 
1

Verwenden Sie zwei verbindet sich mit der gleichen Tabelle. Ist besser für die Leistung, wenn Sie LEFT JOINs als INNER JOINS verwenden.

SELECT 
    m.*, uexp.fbook, udest.fbook 
FROM messages m 
    LEFT JOIN users uexp ON m.exp = uexp.id 
    LEFT JOIN users udest ON m.dest = udest.id 
WHERE m.id = 243; 
1

Sie können versuchen, (I die a.id Sie 114 243 wollen würde nicht denken ist):

SELECT a.*, ue.fbook AS fbokkExp, ud.fbook AS fbookDest 
FROM messages a 
JOIN users ue ON a.exp = ue.id 
JOIN users ud ON a.dest = ud.id 
WHERE a.id = 114; 
+0

yeah ... es sollte 114 sein – Ciprian

Verwandte Themen