1

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

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

ユーザーテーブル

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

3 に答える 3

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
于 2012-04-04T06:59:30.743 に答える
1

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

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;
于 2012-04-04T06:59:59.190 に答える
1

試すことができます (必要な a.id は 243 ではなく 114 だと思います):

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;
于 2012-04-04T07:02:58.260 に答える