PHP MySQL由共同的朋友和国家/地区搜索用户

时间:2016-08-29 23:36:31

标签: php mysql search

我正在开发一种各种社交网络。今天我开始使用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之间的共同朋友的数量。

如何将两者结合起来,以提供更相关的搜索结果?

提前谢谢!

1 个答案:

答案 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;

http://sqlfiddle.com/#!9/728c8a/3