Algo assim.
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)
Em inglês (o que pode ou não deixar mais claro.)
- Selecione o nome da pessoa e o número de interesses que ela compartilha
- Da tabela de pessoas
- Junte-se à tabela de interesses de forma que essa tabela
- São apenas os interesses da pessoa que estamos tentando corresponder.
- (grupo por pessoas
- e ordene pelo número de interesses correspondentes.)
Atualizado sem a subconsulta, mas menos claro
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)