Sven Rautenberg: Nur n-Einträge bei jeder ID

Beitrag lesen

Jetzt habe ich folgendes Query:

select * from automarken, autofarben where automarken.id = autofarben.idautomarken

Soweit alles klar. Jetzt kann ich aber als User sagen wieviel Ergebnis ich PRO Automarken haben möchte. Dh. ich möchte immer nur die ersten 2 Ergebnisse, das würde beim VW heißen, das beim Ergebnis SILBER rausfällt und beim Mercedes BLAU und ROT.

Frage: Woher weiß die Datenbank, daß bei VW rot und blau die ERSTEN beiden Ergebnisse sind? Solange da kein Ordnungsindex reinkommt, kannst du wohl nur sicher sein, daß IRGENDZWEI Farben die ersten sind. Es fehlt bei den Farben an einem Primärschlüssel (ich meine, ich habe zwar keine große Ahnung von Datenbanken, aber ein eindeutiger Schlüssel ist nie verkehrt). Deine Fragestellung ist mir aber klar...

Hat da jemand einen Tipp für mich? Muss ich das über eine gespeicherte Prozedur und einem Cursor machen?

Ich kenne mySQL, aber mir fällt folgender Ansatz ein:

Du gibst jeder Farbe noch einen Farbindex mit, der die Anzahl der Farben in der Tabelle zählt. Also

ID  Farbe     Farbindex
1 - rot     - 1
1 - blau    - 2
1 - silber  - 3

2 - schwarz - 1
2 - rosa    - 2

3 - blau    - 1
3 - schwarz - 2
3 - blau    - 3
3 - rot     - 4

select * from automarken, autofarben where automarken.id = autofarben.idautomarken AND autofarben.farbindex <= 2 ORDER BY autofarben.farbindex

Alternativ generierst du den Zähler (irgendwie mit COUNT) beim Query selbst.

- Sven Rautenberg