Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête SQL complexe, plusieurs à plusieurs

Quelque chose comme ça.

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)

En anglais (ce qui peut ou non rendre les choses plus claires.)

  • Sélectionnez le nom de la personne et le nombre d'intérêts qu'elle partage
  • De la table des personnes
  • Rejoignez le tableau des centres d'intérêt de sorte que ce tableau
  • Ce sont uniquement les intérêts de la personne que nous essayons de faire correspondre.
  • (regrouper par personnes
  • et triez par nombre d'intérêts correspondants.)

Mis à jour sans la sous-requête mais moins clair

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)