从mysql数据库中选择所有朋友

时间:2014-09-28 14:25:42

标签: mysql select join

我有一个用户和他们作为朋友的连接的数据库。 我只想简单地要求用户的所有朋友使用他们的用户名和他们的友谊状态,状态可以是0表示挂起,1表示接受。

表格是:

users          user_friend        friend
- id           - id               -id
- username     - friend_id
               - user_id
               - status

我无法正确查询...也许有人可以帮助我:) 我想在最后得到的是: user_id用户名状态

我尝试的是:(即使它完全错误x))

SELECT u.id, u.username, uf.friend_id, uf.status 
FROM friends f
INNER JOIN user_friend uf ON uf.user_id = :user_id AND uf.friend_id = f.id
INNER JOIN users u ON u.id = uf.user_id

3 个答案:

答案 0 :(得分:0)

首先你可以DROP表朋友。

然后是特定用户的朋友(id = 1234):

SELECT
    CASE uf.user_id
        WHEN 1234 THEN u.username
        ELSE f.username END as friend_name,
    CASE uf.user_id
        WHEN 1234 THEN u.id
        ELSE f.id   END as friend_id,
    uf.status
FROM
    user_friends uf
JOIN
    users f
    ON uf.user_id = u.id AND uf.friend_id = 1234
JOIN
    users u
    ON uf.friend_id = f.id AND uf.user_id = 1234

答案 1 :(得分:0)

根据您的数据布局,您似乎想要这样的东西:

select f.*
from user u join
     userfriends uf
     on uf.user_id = u.id join
     friend f
     on uf.friend_id = f.id
where u.username = XXX;

您的数据结构似乎很奇怪。通常,没有friends表。用户只会彼此交朋友。

答案 2 :(得分:-1)

SELECT u.UserId, f.FriendId, uf.Status
FROM Friend f
INNER JOIN UserFriend uf
ON f.FriendId = uf.FriendId
INNER JOIN Users u
ON uf.UserId = u.UserId WHERE u.UserId = '1'

这将从某个UserId获取所有UserId,FriendId和Status。