在mysql中连接三个表

时间:2013-03-11 08:34:46

标签: php mysql sql select join

我有3个表,我想从中获取用户数据。

表1: frei_session

username    session_id

Prince      51
Dilip       49
Sumit       50

表2: friendrequest

requestTo   requestFrom     status

49              50              C
50              51              C
49              51              P

表3: users

accountId    userImage

49           image_49.jpg
50           image_50.jpg
51           image_51.jpg

friendrequest 表显示 C 代表完成 P 代表待定的用户之间的关系即可。表示status = C两者都是朋友,status = P请求是否待处理。

frei_session 表格显示网站的所有在线用户。

用户表存储了图片路径

我想要显示用户的图像及其ID。

假设用户 49 在线

SELECT  IF(a.RequestTo = 49, c.userName, b.userName) username,
        IF(a.RequestTo = 49, c.session_ID, b.session_ID) Session_ID
FROM    friendRequest a
        INNER JOIN frei_session b
            ON a.requestTo = b.session_ID
        INNER JOIN frei_session c
            ON a.requestFrom = c.session_ID
WHERE   a.status = 'C' AND
        49 IN (a.requestTo, a.requestFrom)

此查询显示此输出

username    session_id

Sumit           50

但我想要像这样输出

username    session_id    userImage

Sumit       50            image_50.jpg

任何想法?

1 个答案:

答案 0 :(得分:1)

您可以将整个查询包装在子查询中,并将其与表users

连接
SELECT  x.*, y.userImage
FROM    
        (
            SELECT  IF(a.RequestTo = 49, c.userName, b.userName) username,
                    IF(a.RequestTo = 49, c.session_ID, b.session_ID) Session_ID
            FROM    friendRequest a
                    INNER JOIN frei_session b
                        ON a.requestTo = b.session_ID
                    INNER JOIN frei_session c
                        ON a.requestFrom = c.session_ID
            WHERE   a.status = 'C' AND
                    49 IN (a.requestTo, a.requestFrom)
        ) x INNER JOIN users y
            ON x.session_ID = y.accountID