Hi,
also stellt euch folgendes Szenario vor:
Ich habe eine Tabelle, in der stehen bspw. Personen drin.
Dann gibt es eine zweite Tabelle, in der stehen bestimmte Eigenschaften/Fähigkeiten der Personen drin. Diese Tabelle hat dementsprechend ein Feld, dessen Wert ich der ersten Personen-Tabelle zuordnen kann.
Nun gibt es noch eine dritte Tabelle, in der Bewertungen der Personen drin stehen.
Was ich möchte?
Ich möchte alle 3 Tabellen kombinieren, was an sich kein Problem ist.
Nun möchte ich aber von den Bewertungen pro Person nur 10 auslesen. Dies bereitet mir Schwierigkeiten -.-
Folgendes funktioniert ohne Probleme, allerdings werden mehr als 10 Bewertungen beachtet:
Die Bewertungen werden, wie man sieht, im Sub-Query eingelesen.
Die Bewertungen möchte ich aber auf 10 Stück beschränken.
Wenn ich jedoch im Subquery ein "Limit 10" setze, dann ist nicht sichergestellt, dass ich 10 Bewertungen zum entsprechenden Benutzer erhalte, da die ON-Anweisung, welche mir die Bewertungen auf den "einen" User beschränkt, erst später beachtet wird.
Eine Möglichkeit mein Problem zu lösen wäre also irgendwie innerhalb des Subquerys nur Bewertungen des Users einer bestimmten ID auszulesen, doch wie komme ich innerhalb des Subquerys an die Personen-ID heran (WHERE folgt ja erst später)?
Mein zweiter Lösungsansatz wäre das Ergebnis LEFT JOIN für die Bewertungen einzuschränken, sodass ich aus dem Ergebnis nur 10 Einträge erhalte. Allerdings weiss ich nicht, wie das zu realisieren geht.
Kann mir jemand helfen?
Gruss
M_Kay
also stellt euch folgendes Szenario vor:
Ich habe eine Tabelle, in der stehen bspw. Personen drin.
Dann gibt es eine zweite Tabelle, in der stehen bestimmte Eigenschaften/Fähigkeiten der Personen drin. Diese Tabelle hat dementsprechend ein Feld, dessen Wert ich der ersten Personen-Tabelle zuordnen kann.
Nun gibt es noch eine dritte Tabelle, in der Bewertungen der Personen drin stehen.
Was ich möchte?
Ich möchte alle 3 Tabellen kombinieren, was an sich kein Problem ist.
Nun möchte ich aber von den Bewertungen pro Person nur 10 auslesen. Dies bereitet mir Schwierigkeiten -.-
Folgendes funktioniert ohne Probleme, allerdings werden mehr als 10 Bewertungen beachtet:
Code:
SELECT ... viele Felder ...
FROM personen
LEFT JOIN (
SELECT ... Felder ...
FROM bewertung
ORDER BY time DESC
) AS bewertung ON bewertung.person = person.id
LEFT JOIN eigenschaften ON eigenschaften.person = person.id
WHERE .... Bedinungen zur Personen-Auswahl ....
GROUP BY .... ORDER BY personen.id ASC
Die Bewertungen werden, wie man sieht, im Sub-Query eingelesen.
Die Bewertungen möchte ich aber auf 10 Stück beschränken.
Wenn ich jedoch im Subquery ein "Limit 10" setze, dann ist nicht sichergestellt, dass ich 10 Bewertungen zum entsprechenden Benutzer erhalte, da die ON-Anweisung, welche mir die Bewertungen auf den "einen" User beschränkt, erst später beachtet wird.
Eine Möglichkeit mein Problem zu lösen wäre also irgendwie innerhalb des Subquerys nur Bewertungen des Users einer bestimmten ID auszulesen, doch wie komme ich innerhalb des Subquerys an die Personen-ID heran (WHERE folgt ja erst später)?
Mein zweiter Lösungsansatz wäre das Ergebnis LEFT JOIN für die Bewertungen einzuschränken, sodass ich aus dem Ergebnis nur 10 Einträge erhalte. Allerdings weiss ich nicht, wie das zu realisieren geht.
Kann mir jemand helfen?
Gruss
M_Kay
Zuletzt bearbeitet: