Выберите пользователей с совпадающими интересами
У меня есть пользователь (идентификатор, имя) Модель, интерес (идентификатор, интерес) Модель и таблица соединений users_interests(user_id, Interest_id) для многих ко многим отношениям.
Как выбрать всех пользователей, которые имеют, например, 2 совпадающих интересов.
Допустим, есть 4 пользователя (Майк, Андре, Джулиан, Джон). 2 из них имеют 3 совпадающих интересов. например, Майк (музыка, спорт, игры), Андре (музыка, спорт, игры). другие 2 пользователя имеют разные интересы.
Мне нужен запрос, где я могу сказать, дать мне всех пользователей с 2 совпадающими интересами. 2 является переменной. результат будет Майк и Андре.
1 ответ
ИМХО, вы не сможете свободно создавать этот тип запроса, поэтому вам придется отказаться от необработанного SQL.
Это, как говорится, является одним из способов, как вы можете подойти к этому с SQL
SELECT DISTINCT u.*
FROM
(
SELECT t1.user_id id1, t2.user_id id2, COUNT(*) count
FROM interest_user t1 JOIN interest_user t2
ON t1.user_id < t2.user_id
AND t1.interest_id = t2.interest_id
GROUP BY t1.user_id, t2.user_id
) q JOIN users u
ON q.count >= 2 -- change 2 to how many mutual interests you want to have
AND u.id IN(id1, id2);
Вот демоверсия SQLFiddle