Gleiche Zeilen einer MySQL Abfrage gruppieren
wisler
- php
0 Vinzenz Mai- datenbank
0 wisler0 Ilja0 wisler
0 Vinzenz Mai
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
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
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
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
ok dann komm ich erstmal so klar.
danke für eure bemühungen!
MfG.
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