phpbar.de logo

Mailinglisten-Archive

[php] Re: [etwas OT] DB-Zeilen "filtern"

[php] Re: [etwas OT] DB-Zeilen "filtern"

Martin Ramsch m.ramsch_(at)_computer.org
Thu, 1 Jul 1999 15:11:47 +0200


Manuel Hossfeld schrieb am Donnerstag, den  1. Juli 1999:
> Also... "group by" sorgt dafür, daß jede doc_id nur einmal angezeigt
> wird, okay.  Aber wieso funktioniert das mit MAX()? MAX(version)
> alleine zeigt ja einfach nur den Datensatz mit der höchsten
> Versionsnr. INSGESAMT an...

GROUP BY bewirkt, daß alle Datensätze mit dem gleichen Gruppierungs-
merkmal (hier z.B. der gleichen doc_id) zu einer Gruppe zusammengefaßt
werden - und Aggregatsfunktionen wie COUNT() oder MAX() beziehen sich
dann jeweils auf die so gebildeten Gruppen von Datensätzen.

Beispiel:
  Die Tabelle "doc" habe folgende Datensätze
     doc | id | version
     ----+----+--------
            0 |  a     
            1 |  a     
            2 |  a     
            0 |  b     
            1 |  d     
            2 |  c     
            0 |  e     
            1 |  b     

Dann bewirkt ein "GROUP BY id" folgende Unterteilung in Gruppen:
     doc | id | version
     ----+----+--------
            0 |  a     
            0 |  b     
            0 |  e     
          ----+--------
            1 |  a     
            1 |  d     
            1 |  b     
          ----+--------
            2 |  a     
            2 |  c     

Ein "SELECT ... GROUP BY id" liefert nun jeweils genau ein
Ergebnistupel pro Gruppe.

"SELECT id, version FROM doc GROUP BY id" ist in Standard-SQL
verboten, weil hier nicht klar wäre, welcher Wert für version
pro Gruppe ausgegeben werden muß.  Deshalb die Regel, daß bei
GROUP BY-Anfragen nur Felder verlangt werden dürfen, die zur
Gruppierung genutzt werden (weil die dann per definitionem
innerhalb jeder Gruppe den gleichen Wert haben).

Ich empfehle, daß Du mal etwas Literatur zu SQL liest.

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ >
PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26  E4 EC 80 58 7B 31 3A D7

  Never take life seriously.  Nobody gets out alive, anyway.


php::bar PHP Wiki   -   Listenarchive