2012-04-04 4 views
1

基本的なメッセージングシステムがセットアップされていて、同じクエリを使って送受信されたメッセージを表示しています。それは非常にうまく動作しますが、私はexpとdestのfbookフィールドを取得する必要があります。 2つのクエリを作成し、ユーザーが表示しているメッセージを送信し、メッセージが受信された場合は別のクエリを使用する場合は1つを使用すると考えましたが、もっと良い方法があるかもしれません。あなたはこのような何かをしたいメッセージングシステムのためのMySQLクエリ。私が理解できない小さなバグ

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

クエリ

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

Usersテーブル

+------------------------+--------------+------+-----+---------------------+----------------+ 
| 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

'WHERE a.id = 243" があるなぜ、最後に'二重引用符? – safarov

+0

実際に変数で設定されているタイプミスです。私はちょうど質問のため手動で設定しました – Ciprian

答えて

2

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

2本使用は、同じテーブルに結合します。 LEFT JOINをINNER JOINSよりも使用すると、パフォーマンスが向上します。

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

あなたは(私はあなたが欲しいa.idは114ない243あると思うだろう)試すことができます。

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

ええ...それは114でなければなりません – Ciprian

関連する問題