phpbar.de logo

Mailinglisten-Archive

[dbs] Re: count(*) kombiniert mit anderer Ausgabe im join

[dbs] Re: count(*) kombiniert mit anderer Ausgabe im join

Martin Ramsch m.ramsch at computer.org
Sam Mai 1 02:29:49 CEST 2004


Konstantin Rekk schrieb:
> (sybase)
>
> select distinct
>    count(*),
>    upper(substring(PR.PersonalName_L,1,1)) as page_letter
> from
>    [...]

> Das Ergebnis liefert die richtige Anzahl (2) , aber alle
> möglichen Anfangsbuchstaben ohne Einschränkung!
> Lasse ich count(*) weg dann bekomme ich auch die richtigen
> Anfangsbuchstaben ( 2 an der Zahl).
>
> Sehe ehrlich gesagt nicht warum, [...]

Das Grundproblem ist, dass diese Query keine Gruppierung (GROUP BY)
nutzt, aber dennoch eine Aggregatsfunktion (nämlich COUNT) zusammen
mit normalen Attributen (hier PersonalName) verwendet.

Das ist in Standard-SQL aus gutem Grund verboten!

MySQL liefert Dir bei einer solchen illegalen Abfrage auch prompt:
| ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
| with no GROUP columns is illegal if there is no GROUP BY clause

Ich kenne jetzt Sybase nicht, aber offensichtlich ist es in diesem
Fall laxer und handhabt das auf seine eigene Weise ...


Konkret für Dein Problem aber ein anderer Lösungsansatz:

  Lass doch das COUNT(*) einfach weg!

Es gibt doch ganz sicher irgendeine Funktion, die Dir die
Anzahl der Ergebniszeilen einer Abfrage liefert, oder?

Mit MySQL und PHP wäre das die Funktion mysql_num_rows.

Ciao,
  Martin


php::bar PHP Wiki   -   Listenarchive