簡體   English   中英

PHP MySQL按共同的朋友和國家/地區搜索用戶

[英]PHP MySQL Search for users by mutual friends and country

我正在開發一種社交網絡。 今天,我開始使用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之間的共同朋友數。

如何將兩者結合起來才能提供更相關的搜索結果?

先感謝您!

例如,如果我有一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM