2017-03-10 44 views
-2

我想显示前5名用户在登录的用户的仪表板基于以下标准:上登录的用户仪表盘显示前5名用户根据喜好

用户都选择在他们的个人资料如下属性:

Relationship preferences, 
Hobbies, 
Interests, 
Language etc 

更偏好将匹配,最高优先级将被分配

table_users

userid ufname ulname gender 
-------------------------------- 
1  test1 Test2 M 
2  testF TestF F 
3  testF1 TestF1 F 
4  testF2 TestF2 F 
5  testF5 TestF2 F 
用户的个人资料个

table_preferences

preference_id user_preferences 
-------------------------------- 
1    Cooking 
2    Gardening 
3    Smoking 
4    Single 
5    widow 
6    traveling 

table_user_preferences

userid user_preference_id 
-------------------------------- 
1  1 
1  2 
1  3 
1  4 

2  3 
2  4 

3  2 
3  3 
3  6 

4  1 

5  1 
5  2 
5  3 
5  4 
5  6 

现在,假设一个用户登录,在他的仪表盘等注册用户(与对面即性别女)将获得显示其最高属性相匹配。正如我们所看到的,用户五5场比赛的大部分属性,因此它会在列表和休息的顶部显示将得到相应显示如下:需要

结果:

User_id ufname 
5  testF5 
3  testF1 
2  testF 
4  testF2 

我的查询是我我正在考虑使用相关性搜索。它会适合吗?任何人都可以提供任何建议。

+3

你好计数申请顺序。你的问题是什么? Stackoverflow在这里可以帮助您解决特定的编程问题,而不是为您编写代码。 http://stackoverflow.com/help/how-to-ask – Twinfriends

+0

你能提供我们你的代码吗?没有您向我们提供您的代码,我们无法帮助您。我们无法知道您是如何编码的,所以我们无法知道您做了什么错误。 – Twinfriends

+0

我并不是要求为此提供解决方案。如果您仔细阅读我的消息,我已经提出了建议,而不是解决方案。 –

回答

0

简单使用MySQL JOINSUBQUERY

1)使用subquery获得的登录用户的偏好。

2)然后加入table_user_preferences与ON tu.userid = tup.useridAND tu.gender !=$current_user_genderIN()条件table_users以匹配登录的用户偏好prefrence。

3)最后组的用户,并通过比赛偏好

select tu.*,tup.userid,count(1) as total_match 
    from table_user_preferences as tup 
    join table_users as tu 
    ON tu.userid =tup.userid 
    where tup.user_preference_id 
    IN (select up.user_preference_id from table_user_preferences as up where up.userid=$current_userid) 
    AND tu.gender !=$current_user_gender 
    group by tup.userid order by total_match desc limit 5