我正在开发一种各种社交网络。今天我开始使用AJAX和php制作动态搜索栏。在我有一个查询,搜索“用户”表中的用户。如果你知道我的意思,我想按相关性订购我的搜索结果。例如,如果我有id为3的用户,搜索John,我想根据共同朋友的数量来命令结果,并且可能是该人居住的地方。 我的表看起来像这样
用户
ID |名字|国家
友
ID | USER_ID | friend_id
我目前的查询是
SELECT * FROM users WHERE name LIKE $keyword
用于用户搜索
和
SELECT COUNT(*) as mutual from users where id in
(select friend_id from friends where user_id = 3 and friend_id in
(select friend_id from friends where user_id = 7)
例如,这将返回用户3和用户7之间的共同朋友的数量。
如何将两者结合起来,以提供更相关的搜索结果?
提前谢谢!
答案 0 :(得分:1)
例如,如果我有id为3的用户,则搜索John,我 想按照共同朋友的数量订购结果
通过共同朋友的数量找到我的朋友的朋友,其名称包含'john'顺序:
select u.*, count(f1.user_id) as num_mutual_friends
from friends f1 -- my friend
join friends f2 on f2.user_id = f1.friend_id -- friend of my friend
join users u on u.id = f2.friend_id
where f1.user_id = 3
and u.name like '%john%'
and u.id <> 3
group by u.id
order by num_mutual_friends desc;
首先向美国用户展示:
order by (u.country = 'us') desc, num_mutual_friends desc;