SQL Select 的结果与计数

SQL Result of Select with count

这应该是一个简单的 SQL 查询,但不知何故我确实很费力。不知道为什么...

我有两个表(USERINFOFRIENDS),我想获取所有以 'm' 开头的朋友并检查我是否是那个的朋友。

唯一的问题是,我想检查 USERID 是否在第二个 table 中,但我无法让它工作。尝试使用连接但没有太大帮助...

到目前为止我的代码:

SELECT u.USERID, u.USERNAME, u.USERPIC, f.ISFRIEND FROM 
                (SELECT * FROM USERINFO WHERE MATCH (USERNAME) AGAINST ('*m*' IN BOOLEAN MODE)) as u, 
                (SELECT count(*) as ISFRIEND FROM FRIENDS WHERE (User_ID = 2 AND Friend_ID = u.USERID) OR (User_ID = u.USERID AND Friend_ID = 2)) as f

u.USERID应该勾选'dynamically'

-------------------------------------------- ---------------------------------------------- --------

此代码显然可以工作,但我需要检查我之前从select 查询中获得的ID。 ..

SELECT u.USERID, u.USERNAME, u.USERPIC, f.ISFRIEND FROM 
                (SELECT * FROM USERINFO WHERE MATCH (USERNAME) AGAINST ('*m*' IN BOOLEAN MODE)) as u, 
                (SELECT count(*) as ISFRIEND FROM FRIENDS WHERE (User_ID = 2 AND Friend_ID = 1) OR (User_ID = 1 AND Friend_ID = 2)) as f

提前致谢:)

马库斯

所以你想知道那个以m开头的人是不是朋友

鉴于您没有提供有关数据结构的详细信息,我们必须得出一个结果(如果适用,将进行调整)。

SELECT
    u.USERID, u.USERNAME, u.USERPIC, 
    case
        when exists (SELECT 0 FROM FRIENDS WHERE (User_ID = 1 AND Friend_ID = u.USERID) OR (User_ID = u.USERID AND Friend_ID = 1)) then 1
        else 0
    end as ISFRIEND

FROM USERINFO u

WHERE MATCH (u.USERNAME) AGAINST ('*m*' IN BOOLEAN MODE)

这在大型系统中性能不佳,因为您总是得到大量以 m* 开头的人,实际上您与

进行比较
*m*

这将为您提供名称中包含 m 的所有用户。这真的是你想要的吗?

我想你需要的是像下面这样的东西。这将 return 所有名称以 m 开头的用户,并加入他们的朋友是传入用户的地方。如果没有加入则表明该用户不是给定用户的朋友。

SELECT 
    u.USERID, 
    u.USERNAME, 
    u.USERPIC, 
    CASE WHEN f.User_ID IS NULL THEN 0 ELSE 1 END CASE AS ISFRIEND 
FROM USERINFO AS u
    LEFT OUTER JOIN FRIENDS AS f ON f.User_ID = u.USERID AND f.User_ID = 46))
WHERE MATCH (u.USERNAME) AGAINST ('*m*' IN BOOLEAN MODE)