показать топ-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 и 5 соответствует большинству атрибутов, поэтому он будет отображаться в верхней части списка, а остальные будут отображаться соответственно следующим образом:

Требуется результат:

User_id ufname
5       testF5
3       testF1
2       testF
4       testF2

Мой запрос — я думаю использовать поиск по релевантности. Подойдет ли это. Любой может помочь мне с любыми предложениями.

-2

Решение

Простое использование MYSQL JOIN а также SUBQUERY

1) Использование subquery чтобы получить предпочтение вошедшего в систему пользователя.

2) Затем объедините table_user_preferences с table_users с помощью ON tu.userid = tup.userid а также AND tu.gender !=$current_user_gender а также IN( ) условие, чтобы соответствовать предпочтению с вошедшим в систему предпочтением пользователя.

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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]