这是我的第一个问题,虽然我多年来一直在利用这个网站寻求帮助。也许是因为我病了,但我无法解决问题。
我在数据库[User]
和[Like]
[User]
表包含基本信息,如(id
,name
,age
)...
[Like]
表只是存储哪些用户喜欢哪些user
(user
,user
)...例如,如果User A
喜欢{{1}它将它作为User B
存储在[Like]
表中。使用外键约束。
我现在需要从数据库中获取user (A) likes user(B)
所有User A
也喜欢的用户,包括来自User A
表的所有相应数据。
示例...
[User]
假设我正在检查的当前用户是[Like table]
user A -> user B
user B -> user A
user A -> user C
user C -> user B
,我需要我的查询返回
User A
因为(user B, user B's name, user B's age)
和User A
彼此相似,所以我只需要信息User B
。
My Current MySQL声明:
User B
这似乎让那些喜欢SELECT li.like_id
from `like` as li
join `like` as ui
on li.like_id = ui.user_id
where li.user_id = **USER_A**
group by li.like_id;
的人回归......我无法弄清楚为什么,因为正如我之前提到的,我已经不在了......但我必须要工作......所以工作我会...在帮助下。感谢。
答案 0 :(得分:1)
SELECT l.like_id
FROM like as l
WHERE l.user_id=USER_A
AND EXISTS
(SELECT l2.like_id
FROM like as l2
WHERE l2.like_id=USER_A
AND l2.user_id=l.like_id);
答案 1 :(得分:1)
select u.*
from
`like` ul inner join `like` lu
on ul.user_id = lu.like_id and ul.like_id = lu.user_id
inner join `user` u
on u.id = ul.like_id
where
ul.user_id = ?
EXPLANATION 它们的键实际上是在like表的两个实例之间的连接中。最终它表示匹配每个"喜欢"与另一个"喜欢"具有相同的user_id和like_id值,但顺序相反。使用内连接而不是外连接可以保证关系是互惠的,因此它会丢弃所有您不感兴趣的关系。
此时你只对#34;喜欢"感兴趣。用户的属性,因此最后一步是针对ul.like_id
表查找user
。 (lu.user_id
必须具有相同的值,因此它也可以起作用。)
notevenwrong的回答几乎完全相同。它确实具有在两个地方使用USER_A
参数的缺点,尽管可以通过与外部引用相关联在子查询中消除它。
我认为连接有点突出了查询的对称性,更适合其他用途。 exists
版本的速度当然可能更快。