wisler: Gleiche Zeilen einer MySQL Abfrage gruppieren

Hallo

Ich bin gerade am Basteln an einem Kassensystem mit PHP und MySQL.
Ich habe eine Tabelle mit den Rechnungsdaten (z.B. Rechnungsnummer, benutzerid, Zeit, Datum, ...) und eine Tabelle mit den einzelnen Positionen die ich dan mittels der Rechnungsnummer verknüpfe.

Ich wollte wissen wie ich es anstellen kann, dass bei der abfrage pro rechnungsnummer alle gleichen gruppiert werden und mit einer stückanzahl am anfang angeführt wird.

z.B. aus 3 datensätzen von denen 2 den gleichen artikel haben soll dieses rauskommen:
1x Jause
2x Gepäck

Bitte um HILFE!

Danke
wisler

  1. Hallo,

    Ich wollte wissen wie ich es anstellen kann, dass bei der abfrage pro rechnungsnummer alle gleichen gruppiert werden

    Gruppieren geht mit der GROUP-BY-Klausel der SELECT-Anweisung.

    und mit einer stückanzahl am anfang angeführt wird.

    dafür gibt es die Aggregatsfunktion COUNT().

    z.B. aus 3 datensätzen von denen 2 den gleichen artikel haben soll dieses rauskommen:
    1x Jause
    2x Gepäck

    SELECT                        -- Gib mir  
        COUNT(Artikel) Anzahl,    -- die Anzahl gleicher Artikel (als Anzahl)  
        Artikel                   -- und die Bezeichnung des Artikels  
    FROM                          -- aus  
        Tabelle                   -- meiner Tabelle  
    GROUP BY                      -- wobei es für jeden  
        Artikel                   -- Artikel nur einen Datensatz geben soll  
    
    

    Was das mit PHP zu tun haben soll, entgeht mir. Das sind Grundlagenkenntnisse von SQL.

    Freundliche Grüße

    Vinzenz

    1. ok danke das was schon mal ein anfang.
      ich komme aber noch nicht so ganz mit wie ich es ausgeben kann.
      kann ich aber mit der einen abfrage auch die daten ausgeben oder muss ich eine 2 abfrage (eine zum zählen und eine zum auswerten der daten) anlegen?

      mfg

      1. yo,

        kann ich aber mit der einen abfrage auch die daten ausgeben oder muss ich eine 2 abfrage (eine zum zählen und eine zum auswerten der daten) anlegen?

        grundsätzlich ja, es kommt aber genauer darauf an, was du anzeigen willst. du gruppierst über die jeweiligen einzelposten der rechnung. wenn du die daten des rechnungskopf angeben willst (dort wo deine rechnungsid steht), dann nimm einfach alle spalten mit in die gruppierung, die du auch anzeigen willst. bei mysql gibt es da noch eine besonderheit, dass du auch spalten anzeigen kannst, über die du nicht gruppiert hast und keine aggregat-funtion sind wie zum beispiel count. aber das ist hier schon sehr oft diskutiert thema und wird wohl von den meisten als bug angesehen und weniger als feature.

        schwieriger wird es, wenn du daten aus den einzelposten anzeigen willst. schließlich gruppierst du ja darüber, sprich wenn eine rechnungs mehrere posten hat, du aber pro rechnung nur einen datensatz durch die gruppierung anzeigen läßt, dann müsstest du dich ja für eine der rechnungsposten entscheiden, wo du zusätzliche informationen von anzeigen willst und das macht dann auch meistens keinen sinn.

        also lange rede kurzer sinn, ja man kann mehr anzeigen, kommt aber immer auf die gruppierung drauf an nud was du dazu anzeigen willst.

        Ilja

        1. ok dann komm ich erstmal so klar.

          danke für eure bemühungen!

          MfG.

      2. Hallo,

        ich komme aber noch nicht so ganz mit wie ich es ausgeben kann.

        wie das Ergebnis jeder anderen Abfrage auch.

        kann ich aber mit der einen abfrage auch die daten ausgeben oder muss ich eine 2 abfrage (eine zum zählen und eine zum auswerten der daten) anlegen?

        Ich verstehe nicht, was Du damit meinst :-(
        Angenommen, es besteht folgende Tabelle:

        Tabelle

        Artikel
        -------
        Gepäck
        Jause
        Gepäck

        so liefert die von mir angegebene Abfrage

        SELECT                        -- Gib mir  
            COUNT(Artikel) Anzahl,    -- die Anzahl gleicher Artikel (als Anzahl)  
            Artikel                   -- und die Bezeichnung des Artikels  
        FROM                          -- aus  
            Tabelle                   -- meiner Tabelle  
        GROUP BY                      -- wobei es für jeden  
            Artikel                   -- Artikel nur einen Datensatz geben soll  
        
        

        das Ergebnis

        Anzahl | Artikel
        -------+--------
             2 | Gepäck
             1 | Jause

        Das ist genau das Ergebnis, dass Du in Deinem Ausgangsbeitrag wünschtest.
        Wenn das nicht alles ist, was Du benötigst, dann wäre es nett, wenn Du Deine Fragestellung präzisiertest. Meine Glaskugel konnte mir ebenfalls nicht weiterhelfen, daher bist Du am Zug.

        Freundliche Grüße

        Vinzenz