选择的SQL结果与计数

时间:2015-06-26 23:39:13

标签: mysql sql select count

这应该是一个简单的SQL查询,但不知何故,我做了很多努力。不知道为什么......

我有两张桌子( USERINFO FRIENDS ),我想让所有朋友都以' m'例如,检查我是否是他的朋友。

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

到目前为止我的代码:

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'

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

此代码显然正常工作,但我需要在之前检查我从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

提前致谢:)

马库斯

2 个答案:

答案 0 :(得分:0)

所以你想知道那个人是否是以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的所有用户。这真的是你想要的吗?

答案 1 :(得分:0)

我认为您需要的是以下内容。这将返回名称以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)