SELECT *
FROM table1 b,
table2 e,
( SELECT * FROM table1 sub_b, table3 sub_r WHERE sub_b.benutzer_id = sub_r.benutzer_id ORDER BY sub_r.bewertung LIMIT 10 ) r
WHERE b.benutzer_id = e.benutzer_id
AND b._benutzer_id = r.benutzer_id
>
> Das sollte Dir sauber alle Felder liefern, die auf die 3 Tabellen passen und bei denen nur die besten 10 Bewertungen je benutzer beachtet werden.
>
Dem ist leider nicht ganz so, denn ich möchte ja nicht jeden User haben, sondern die Auswahl einschränken :)
In dem SubQuery werden aber alle Bewertungen ausgelesen und dann sofort auf 10 beschränkt, ohne dass ich sagen kann, welche Personen ich haben möchte.
Betrachten wir nur den Subquery. Ich möchte meine Benutzerwahl einschränken können, zB anhand des Namen:
~~~sql
SELECT p.id
FROM personen AS p
WHERE name LIKE '%Mustermann%'
Nun sollen ja innerhalb des Subquerys noch die Bewertungen ausgelesen werden, allerdings nur 10. Nach deinem Beispiel müsste der Subquery dann so aussehen (ohne 10er-Begrenzung):
SELECT p.id
FROM personen AS p, bewertungen AS b
WHERE name LIKE '%Mustermann%'
AND p.id = bewertungen.person
Hier wird klar, dass ich mit dem Subquery nicht weit komme.
Denn es muss nicht unbedingt eine Bewertung existieren (habe ich vergessen zu sagen :X). Damit würden nur Personen ausgelesen werden, die bewertet worden sind.
Also muss ich es mittels einen Left Joins lösen.
Aber da komme ich nicht weiter.
Wenn ich alle Bewertungen einbeziehe ist das kein Problem. Einfach ein paar Joins und fertig. Aber wichtig ist mir, dass ich das auf 10 Bewertungen beschränke.
Wie oben bereits genannt sollen dabei auch User ausgelesen werden, die noch gar nicht bewertet worden sind.
Gruss
Speedy