Mysql
 sql >> Database >  >> RDS >> Mysql

query SQL complesse, molti a molti

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)