我有一个用户和他们作为朋友的连接的数据库。 我只想简单地要求用户的所有朋友使用他们的用户名和他们的友谊状态,状态可以是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
答案 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。