Вы сказали более 3 общих идентификаторов интересов , так что вы имеете в виду «по крайней мере 4», верно?
SELECT first1.userid, second1.userid
FROM users_interests first1, users_interests second1,
users_interests first2, users_interests second2,
users_interests first3, users_interests second3,
users_interests first4, users_interests second4
WHERE
first2.userid=first1.userid AND first3.userid=first1.userid AND first4.userid=first1.userid AND
second2.userid=second1.userid AND second3.userid=second1.userid AND second4.userid=second1.userid AND
first1.userid<>second1.userid AND
first1.interestid=second1.interestid AND
first2.interestid=second2.interestid AND first2.interestid<>first1.interestid AND
first3.interestid=second3.interestid AND first3.interestid<>first2.interestid AND first3.interestid<>first1.interestid AND
first4.interestid=second4.interestid AND first4.interestid<>first3.interestid AND first4.interestid<>first2.interestid AND first4.interestid<>first1.interestid
Поскольку я не проверял это, помните, чтов нем могут быть ошибки, поэтому используйте его, только если вы его понимаете.
Если вам нужно то же самое для других общих интересов, я уверен, что вы можете написать код для динамической генерации этого запроса для любогочисло.Кроме того, если вам нужны проценты names , я уверен, что вы сможете добавить необходимые четыре объединения в таблицу interests
и добавить соответствующие столбцы в предложение SELECT
.