这应该是一个简单的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
提前致谢:)
马库斯
答案 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)