sql >> Databasteknik >  >> RDS >> Mysql

komplex SQL-fråga, många till många

Något sånt här.

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)

På engelska (vilket kanske gör det tydligare eller inte.)

  • Välj personens namn och antalet intressen de delar
  • Från folkbordet
  • Gå med i intressetabellen så att den tabellen
  • Är bara intressen hos den person vi försöker matcha.
  • (gruppera efter personer
  • och ordna efter antalet intressen som matchar.)

Uppdaterad utan underfrågan men mindre tydlig

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)



  1. MySQL - PHP:Visa resultat i tabellrader (5 resultat per rad)

  2. Konfigurera LDAP-autentisering och gruppmappning med MariaDB

  3. Exkluderar poster där underfrågan returnerar resultat som måste utesluta varandra

  4. Hur MAKEDATE() fungerar i MariaDB