Нещо подобно.
Select people.id, people.name, count(interest.id)
from people
left join people_interests on people.id = people_interests.peopleid
left join interests on people_interests.interestid = interests.interest.id
where interests.id in (select id from interests where interests.peopleid = @inputuserid)
group by people.id, people.name
order by count(interest.id)
На английски (което може или не може да направи по-ясно.)
- Изберете името на лицето и броя интереси, които споделя
- От таблицата с хора
- Присъединете се към таблицата с интереси, така че тази таблица
- Само интересите на човека, който се опитваме да съпоставим.
- (група по хора
- и подредете по броя на съвпадащите интереси.)
Актуализирано без подзаявката, но по-малко ясно
Select people.id, people.name, count(interest.id)
from people
left join people_interests on people.id = people_interests.peopleid
left join interests on people_interests.interestid = interests.interest.id
inner join interest i2 on (interests.id = i2.id and i2.people_id = @inputuserid)
group by people.id, people.name
order by count(interest.id)