1

我有一个包含用户 ID 和关注列的跟随表,我有一个包含用户 ID 和用户名的用户表。

我希望能够选择关注用户 4 的用户,但在同一个选择查询中有一个列让调用是 followornot,如果用户 4 不关注被选择的人,则为 0,如果用户 4 关注所选用户,则为 1 .

我有这样的想法,但它没有按预期工作。

查询如下

SELECT
  u.username,
  u.userid,
  (case when following= '4'  then 1 else 0 end) as followornot
FROM user u inner JOIN followTable f ON f.userid = u.userid
WHERE f.following = '4'   

样本记录:

用户

╔════════╦══════════╗
║ USERID ║ USERNAME ║
╠════════╬══════════╣
║      1 ║ john     ║
║      2 ║ jane     ║
║      3 ║ smith    ║
║      4 ║ paul     ║
╚════════╩══════════╝

跟随表

╔════════╦═════════════╗
║ USERID ║ FOLLOWINGID ║
╠════════╬═════════════╣
║      1 ║           2 ║
║      4 ║           1 ║
║      3 ║           4 ║
║      1 ║           4 ║
╚════════╩═════════════╝

SQLFiddle 链接

4

2 回答 2

1
SELECT  u.*,
        (d.followingID IS NULL) followornot
FROM    user u
        INNER JOIN followTable f
            ON u.userID = f.userID
        LEFT JOIN followTable d
            ON  u.userid = d.followingID AND
                d.userID = 4
WHERE   f.followingid = 4

输出

╔════════╦══════════╦═════════════╗
║ USERID ║ USERNAME ║ FOLLOWORNOT ║
╠════════╬══════════╬═════════════╣
║      1 ║ john     ║           0 ║
║      3 ║ smith    ║           1 ║
╚════════╩══════════╩═════════════╝
于 2013-06-01T17:59:36.937 回答
0

你为什么不这样做:

select u.id, f.key_user, key_follower FROM user u INNER JOIN is_following f ON u.id=f.key_user AND f.key_follower=4;

其中 u.id 是用户 ID,key_user 是 is_following 中的 fk,key_follower 是用户 ID 后面跟着的用户 ID。

于 2013-06-01T17:59:53.510 回答