MySQL选择查询不工作

MySQL选择查询不工作,mysql,sql,select,join,Mysql,Sql,Select,Join,我有两个表,我想从中获取用户数据 表1:frei_session username session_id Prince 51 Dilip 49 Sumit 50 表2:friendrequest requestTo requestFrom状态 49 50摄氏度 50 51摄氏度 4951页 friendrequest表格显示了用户之间的关系,其中C代表Complete,而p代表Pending。表示如果status=C两人都是朋友,如果status=P

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

表1:
frei_session

username    session_id

Prince      51
Dilip       49
Sumit       50
表2:
friendrequest

requestTo requestFrom状态
49 50摄氏度
50 51摄氏度
4951页
friendrequest表格显示了用户之间的关系,其中C代表Complete,而p代表Pending。表示如果
status=C
两人都是朋友,如果
status=P
请求挂起

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

我只想限制和朋友聊天。我尝试了以下查询,但它显示了所有在线用户

假设用户49在线

选择不同的f.username、f.session\u id
来自frei_会话作为f
在fr.requestFrom=f.session\u id上以fr身份左键加入friendrequest
左加入friendrequest作为frnd上的frnd。requestTo=f.session\u id
其中(fr.requestFrom49或frn.requestTo49)和(fr.status='C'或frn.status='C')
此查询向我显示如下输出

用户名会话\u id
王子51
苏米特50
但我想要这样的输出

用户名会话\u id
苏米特50

因为user51和user49不是朋友

为什么要两次加入同一个表

试一试

然后,您可以通过以下方式更改where查询:

WHERE fr.requestFrom<>49 AND fr.status = 'C'
其中fr.requestFrom49和fr.status='C'
我会尝试
按fr.status分组
如果我确实了解您的问题,它可能会起作用。

尝试使用此查询:

SELECT DISTINCT f.username,f.session_id
FROM frei_session AS f
LEFT JOIN friendrequest AS fr ON f.session_id IN (fr.requestFrom, fr.requestTo)
WHERE fr.requestFrom = 49 AND fr.status = 'C'
结果

╔══════════╦════════════╗
║ USERNAME ║ SESSION_ID ║
╠══════════╬════════════╣
║ Sumit    ║         50 ║
╚══════════╩════════════╝
更新1

DELIMITER $$
CREATE PROCEDURE ShowAllUserName(IN _sessionID INT)
BEGIN
    SELECT  IF(a.RequestTo = _sessionID, c.userName, b.userName) username,
            IF(a.RequestTo = _sessionID, 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
            _sessionID IN (a.requestTo, a.requestFrom);
END;
DELIMITER $$
调用过程时

CALL ShowAllUserName(49);

您可以首先获取从Dilip收到请求的用户。然后,您将获得向Dilip发送请求的用户。之后,您将联合这些用户。SQL类似于:

SELECT fs.username, fs.session_id
FROM   frei_session AS fs, friendrequest AS fr
WHERE  fs.username = "Dilip"
  AND  fs.session_id = fr.requestFrom
  AND  fr.status = "C"
UNION
SELECT fs.username, fs.session_id
FROM   frei_session AS fs, friendrequest AS fr
WHERE  fs.username = "Dilip"
  AND  fs.session_id = fr.requestTo
  AND  fr.status = "C"

我相信这个解决方案更容易理解。

awesome JW。它的工作就像一个魅力,你是优秀的。非常感谢您要我将其转换为存储过程吗?您能告诉我如何将您的输出以该表格格式制成表格吗?
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)
SELECT fs.username, fs.session_id
FROM   frei_session AS fs, friendrequest AS fr
WHERE  fs.username = "Dilip"
  AND  fs.session_id = fr.requestFrom
  AND  fr.status = "C"
UNION
SELECT fs.username, fs.session_id
FROM   frei_session AS fs, friendrequest AS fr
WHERE  fs.username = "Dilip"
  AND  fs.session_id = fr.requestTo
  AND  fr.status = "C"
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)