Mysql
 sql >> Datenbank >  >> RDS >> Mysql

komplexe SQL-Abfrage, viele zu viele

Etwas in der Art.

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)

Auf Englisch (was es vielleicht klarer macht oder auch nicht).

  • Wählen Sie den Namen der Person und die Anzahl der gemeinsamen Interessen aus
  • Aus der Personentabelle
  • Treten Sie der Interessentabelle bei, damit diese Tabelle
  • Sind nur die Interessen der Person, die wir versuchen abzugleichen.
  • (nach Personen gruppieren
  • und nach der Anzahl der übereinstimmenden Interessen sortieren.)

Ohne Unterabfrage aktualisiert, aber weniger klar

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)