AllesMeins: /MySQL: Gemeinsamkeiten von Usern finden

Beitrag lesen

Hi,

folgende Situation. Ich habe hier eine Datenbank mit Musikstücken. Sie besteht aus 3 (relevanten) Tabellen:

1.) userTitel: Welche Titel hat ein User eingegeben (eindeutige Zuordnung über UserId und TitelId)
2.) titel: Welcher Künstler hat den Titel gemacht (und weiterer Informationen zum Titel, die nicht weiter relevant sind). Eindeutige Zuordnung über titelId und künstlerId
3.) künstler: Informationen über die jeweiligen Künstler

Was ich nun erhalten möchte ist eine Liste mit allen Paaren von Usern, die einen oder mehrere Künstler gemeinsam gehört haben und optimalerweise noch eine Liste mit den gemeinsamen KünstlerIds. Hier geht es um relativ große Tabellen (bis zu 50 Millionen Einträge), ich müsste das also so weit wie möglich direkt in MySQL lösen um nicht all zu viel vom Server zum Client schieben zu müssen. Genauso will ich natürlich auch interne "Riesen-Joins" soweit es geht vermeiden.

Ich brauch also etwas Hilfe beim erstellen dieses Querys - als Ausgangspunkt habe ich mir schon mal etwas gebastelt, das aber sicherlich weder hübsch noch effizient ist:

SELECT * FROM (SELECT userId, artistId FROM userTitel LEFT JOIN titel USING (titelId) GROUP BY artistId, userId) as t1 JOIN (SELECT userId, artistId FROM userTitel LEFT JOIN titel USING (titelId) GROUP BY artistId, userId) as t2 ON t1.artistId = t2.artistId

Bin ich damit auf einem richtigen Weg?
Kann ich irgendwie den Doppelten Query in den Sub-Selects vermeiden? Ist ja unsinnig den zweimal auszuführen
Was kann man noch machen um das ganze effizient zu bekommen oder geht es ganz anders viel besser?