Qualcosa del genere.
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)
In inglese (che può renderlo più chiaro o meno.)
- Seleziona il nome della persona e il numero di interessi che condivide
- Dalla tabella delle persone
- Unisciti alla tabella degli interessi in modo tale che quella tabella
- Sono solo gli interessi della persona che stiamo cercando di soddisfare.
- (raggruppa per persone
- e ordina in base al numero di interessi corrispondenti.)
Aggiornato senza la query secondaria ma meno chiaro
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)