JOIN und Limit

JOIN und Limit

am 09.07.2006 14:31:00 von Xaradas

Hallo,

nehmen wir an, ich habe 1000 Datensätze in TabelleA und zu jedem dieser
Datensätze zwischen 1 und 10 passende Datensätze in TabelleB.
Normalerweise würde ich die mit einem simplen JOIN verbinden und dann
auf der Webseite formatiert ausgeben.

Wie mache ich das aber, wenn ich z.B. immer nur 20 Datensätze aus
TabelleA pro Seite anzeigen will? Klar, mit einem LIMIT x,y. Dann müßte
ich allerdings für jeden der 20 Datensätze ein neues SELECT Statement
ausführen, das die passenden Datensätze aus TabelleB ausliest.

Kann ich nicht irgendwie TabelleA mit TabelleB direkt mit JOIN
verbinden, um damit nur ein SELECT Statement an die Datenbank zu
schicken und das Ergebnis trotzdem mit LIMIT x,y begrenzen. Die LIMIT
x,y Angabe müßte ich dabei irgendwie nur auf TabelleA begrenzen können,
denn nur diese Anzahl ist relevant für die Darstellung.

Re: JOIN und Limit

am 09.07.2006 18:02:55 von Johannes Vogel

Hi Oliver

Oliver Benning wrote:
> nehmen wir an, ich habe 1000 Datensätze in TabelleA und zu jedem dieser
> Datensätze zwischen 1 und 10 passende Datensätze in TabelleB.
> Normalerweise würde ich die mit einem simplen JOIN verbinden und dann
> auf der Webseite formatiert ausgeben.
> Wie mache ich das aber, wenn ich z.B. immer nur 20 Datensätze aus
> TabelleA pro Seite anzeigen will? Klar, mit einem LIMIT x,y. Dann müßte
> ich allerdings für jeden der 20 Datensätze ein neues SELECT Statement
> ausführen, das die passenden Datensätze aus TabelleB ausliest.
> Kann ich nicht irgendwie TabelleA mit TabelleB direkt mit JOIN
> verbinden, um damit nur ein SELECT Statement an die Datenbank zu
> schicken und das Ergebnis trotzdem mit LIMIT x,y begrenzen. Die LIMIT
> x,y Angabe müßte ich dabei irgendwie nur auf TabelleA begrenzen können,
> denn nur diese Anzahl ist relevant für die Darstellung.

Nein, das geht m.E. nicht. Limitiere stattdessen einfach seitens
Applikationssprache.

HTH, Johannes

Re: JOIN und Limit

am 10.07.2006 09:51:07 von Thomas Rachel

Oliver Benning wrote:

> Hallo,
>
> nehmen wir an, ich habe 1000 Datensätze in TabelleA und zu jedem dieser
> Datensätze zwischen 1 und 10 passende Datensätze in TabelleB.
> Normalerweise würde ich die mit einem simplen JOIN verbinden und dann
> auf der Webseite formatiert ausgeben.
>
> Wie mache ich das aber, wenn ich z.B. immer nur 20 Datensätze aus
> TabelleA pro Seite anzeigen will? Klar, mit einem LIMIT x,y. Dann müßte
> ich allerdings für jeden der 20 Datensätze ein neues SELECT Statement
> ausführen, das die passenden Datensätze aus TabelleB ausliest.

Du verschweigst uns leider die Version Deines MySQL. Bei einem
hinreichend neuen MySQL würde das mit GROUP_CONCAT und GROUP BY evtl.
gehen. Die Anzeige wäre dann allerdings entweder "1 Zeile pro A-Wert"
oder Du müßtest die einzelnen Teile applikationsseitig
auseinanderpfriemeln.

Was auch gehen könnte, wäre was mit Subselect- aber da könntest Du, glaub
ich, nur die ID von A ausgeben; für die restlichen A-Felder wäre dann
ein weiterer Query notwendig.

HTH,

Thomas
--
Chancengleichheit besteht nicht darin, dass jeder einen Apfel pflücken
darf, sondern dass der Zwerg eine Leiter bekommt.
(Reinhard Turre,deutscher Theologe)