我有两张表如下
用户[ID,用户名]
relationship [user1_id(FK),user2_id(FK),status]
我正在尝试使用username
或user1_id
来自user2_id
status = 1
来获取relationship
。 user1_id
和user2_id
都是ID
表中的user
个。以下查询失败,我不确定它在哪里出错。
SELECT
U.username,
(R.first_user_id, R.second_user_id AS friends)
FROM
user U,
`relationship` R
WHERE (R.`first_user_id` = {$userID} OR R.`second_user_id`)
AND (`status` = 1 AND U.ID = friends)
答案 0 :(得分:1)
返回状态为1的关系中的两个用户名。 这也假定如果存在关系记录,则两个用户都必须在用户表中。
SELECT U1.UserName, U2.username
FROM Relationship R
INNER JOIN USER U1
on R.User1_ID = U1.user_ID
INNER JOIN USER U2
and R.User2_ID = U2.user_ID
WHERE R.Status=1
答案 1 :(得分:0)
看起来您可能正在尝试获取与某个指定用户有关系的所有用户的用户名,而不管关系记录中用户ID的顺序如何。可能是这样的:
SELECT
U.username,
U.first_user_id,
FROM
user U
JOIN `relationship` R
ON R.first_user_id = U.ID
WHERE
(R.`second_user_id` = {$userID})
AND (`status` = 1)
UNION ALL
SELECT
U.username,
U.second_user_id,
FROM
user U
JOIN `relationship` R
ON R.second_user_id = U.ID
WHERE
(R.`first_user_id` = {$userID})
AND (`status` = 1)
如果这会产生重复(或可能),并且您不希望这样做,请将UNION ALL
更改为直线UNION
。
答案 2 :(得分:0)
我基于xQbert回答成功了:
SELECT
U1.username,
U2.username
AS user_friend
FROM
Relationship R
INNER JOIN
user U1
ON
R.first_user_id = U1.ID
INNER JOIN
user U2
ON
R.second_user_id = U2.ID
WHERE (R.`first_user_id` = {$userID} OR R.`second_user_id` = {$userID})
AND `status` = 1