Выберите пользователей с совпадающими интересами

У меня есть пользователь (идентификатор, имя) Модель, интерес (идентификатор, интерес) Модель и таблица соединений 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

Другие вопросы по тегам