phpbar.de logo

Mailinglisten-Archive

[dbs] Problem mit SELECT und GROUP

[dbs] Problem mit SELECT und GROUP

Nico Haase nico.haase at gmx.de
Mit Apr 7 18:40:30 CEST 2004


Moin nochemal,

> ... mit einem LEFT JOIN könnte man dir bestimmt helfen
>
>
>     SELECT `copy`.*,
>            MAX(`org`.`val`) AS `maxval`
>       FROM `org`
> LEFT JOIN `org` AS `copy`
>         ON `org`.`[pk]` = `copy`.`[pk]`
>   GROUP BY `org`.`[pk]`
>     HAVING `copy`.`val` = `maxval`
>
> ... oder so ähnlich ...
>
> grüße!

Ganz so genial ist der Join nun doch nicht. Ich habe unter anderem folgende Felder in meiner Tabelle: buchnr, titel, vorname, autor, beschreibung, fazit, vorschlag. Gegroupt nach den Einträgen in vorschlag soll nun der MAX-Wert des Länge von beschreibung + Länge von fazit ermittelt werden. Der Join dafür sieht folgendermaßen aus:

SELECT  `b1`.`buchnr`  AS buchnr,  `b1`.`vorschlag`  AS vorschlag,  `b1`.`titel`  AS titel,  `b1`.`vorname`  AS vorname,  `b1`.`autor`  AS autor, LENGTH( CONCAT(  `b1`.`beschreibung` ,  `b1`.`fazit`  )  )  AS laenge, max( LENGTH( CONCAT(  `b2`.`beschreibung` ,  `b2`.`fazit`  )  )  )  AS laenge2
FROM  `buecher`  AS b1
LEFT  JOIN  `buecher`  AS b2 ON  `b1`.`buchnr`  =  `b2`.`buchnr`
GROUP  BY  `b1`.`vorschlag`
HAVING laenge = laenge2

Insgesamt müsste der Query meiner Meinung nach mindestens 65 Zeilen zurückgeben, laut "SELECT distinct ( vorschlag ) FROM buecher;" existieren so viele verschiedene Einträge. Es sind aber nur 35 Zeilen - kannst du dir (oder besser mir *g*) das erklären?
mfg
Nico

php::bar PHP Wiki   -   Listenarchive