MySql - Summe rechnen

reyjr

Grünschnabel
Hallo,

ich habe folgendes Problem ich muss Statistiken machen und dafür die Summe der gekauften Artikel rechnen können. Das ganze aber noch mit einigen Filtern
PHP:
SELECT * FROM tblArtikel,tblKategorie,tblAuftrag,tblAuftragLinie WHERE
`fiKateg` LIKE '%%' AND `dtMarke` LIKE '%%' AND `fiAuftrag` =
`IdAuftrag` AND `dtDatum` >= '' AND `dtDatum` <= '' AND
`dtGekauft` = 'j' Group BY `idLinie`

Mit diesen Query kommen dann z.b. 5 Datensätze jetzt muss ich aber noch die Summe der einzelnen Artikel zusammen rechnen die Anzahl steht in `dtAnzahl` und die ArtikelId ist `IdNoArt`. Aber wie kann ich jetzt die Summe dovun rechnen ? Im Access kann man ja einfach Sum(feld).... machen aber wie kann ich das Problem hierlösen.?

Danke schon im Voraus
mfG
reyjr
 
Auch in MySQL kannst Du mit SUM(`feld`) arbeiten. Es sollte auch sum(`feld1`*`feld2`) funktionieren.

Gruß hpvw
 
Wie müsste ich das den implementieren da Select Sum(`feld`), * da bekomm ich Syntax error und ausserdem soll er ja die Einzelnen ArtikelAnzahl zusammenrechnung und nicht alle 5 Datensätzen

mfG
reyjr
 
Mach bitte mal ein Beispiel:
  • Tabelle mit Testdaten
  • Gewünschtes Ergebnis
  • Berechnungsvorschrift
Gruß hpvw
 
PHP:
SELECT * FROM tblArtikel,tblKategorie,tblAuftrag,tblAuftragLinie WHERE `fiKateg` LIKE '%%' AND `dtMarke` LIKE '%%' AND `fiAuftrag` = `IdAuftrag` AND `fiArtId` = `idNoArt` AND `dtDatum` >= '' AND `dtDatum` <= '' AND `dtGekauft` = 'j' Group BY `idLinie`

also hier komm folgendes raus:

idNoArt dtMarke dtName dtBesch dtBildUrl dtPreis dtStock dtFarbe dtGroesse fiKateg dtPromo dtShowA IdKateg dtHauptkateg dtUnterKateg dtShow idAuftrag dtDatum dtZahlungArt dtGekauft fiUser dtStatus idLinie dtAnzahl fiArtId fiAuftrag dtKPreis 169 Giro Atmos Fassa Bortolo Der Helm der Profis 393368-95718.jpg 149 0 L=59-63 13 0 y 16 Bekleidung Überschuhe y 164697 0000-00-00 j 3 3 12 3 169 164697 149 173 Giro Atmos Rabobank sdfdsfssfdfsdfdsfds Atmos Rabobank 4554 0 dsffdsfsdfds dfsfsdfds 13 0 y 16 Bekleidung Überschuhe y 164697 0000-00-00 j 3 3 13 1 173 164697 4554 169 Giro Atmos Fassa Bortolo Der Helm der Profis 393368-95718.jpg 149 0 L=59-63 13 0 y 16 Bekleidung Überschuhe y 572815 0000-00-00 j 3 3 14 7 169 572815 149 173 Giro Atmos Rabobank sdfdsfssfdfsdfdsfds Atmos Rabobank 4554 0 dsffdsfsdfds dfsfsdfds 13 0 y 16 Bekleidung Überschuhe y 572815 0000-00-00 j 3 3 15 6 173 572815 4554 168 Giro Atmos Fassa Bortolo Der Helm der Profis 393368-95718.jpg 149 0 M=55-59 13 0 y 16 Bekleidung Überschuhe y 572815 0000-00-00 j 3 3 16 8 168 572815 149
so und jetzt will ich die Summe der verkauften Artikel Rechnen z.b. artikelno 169 hat 2 einträge un wurde einmal 3 mal gekauft und einmal 7mal jetzt will ich die Summe davon ausserdem noch die Einnahmen d.h. 3* dtKPreis + 7* dtKPreis
 
Ein Beispiel:
SQL:
select
  idNoArt,
  dtMarke,
  dtName,
  #...
  sum(dtPreis * dtAnzahl) as Umsatz
from tblArtikel
left join tblAuftrag
  on tblAuftrag.fiArtId=tblArtikel.idNoArt
group by tblArtikel.idNoArt
Den Rest wirst Du selbst zusammen sammeln müssen, da aus Deinen Ausführungen nicht hervor geht, welche Daten aus welcher Tabelle stammen und wie sie miteinander zusammenhängen.

Gruß hpvw
 
Danke hab das jetzt so hinbekommen

Code:
 "SELECT SUM(dtKPreis * dtAnzahl) As UmsatzProArtikel,
SUM(dtAnzahl) AS ArtAnz 
FROM tblAuftrag,tblAuftragLinie 
WHERE `fiArtId` = '$row->idNoArt' 
AND `idAuftrag`=`fiAuftrag`Group By `fiArtId`"

Das ist jetzt ein Query der in der While Schleife dieses Query läuft

Code:
SELECT * FROM tblArtikel,tblKategorie,tblAuftrag,tblAuftragLinie 
WHERE `fiKateg` LIKE '%%'  	  
 AND `dtMarke` LIKE '%%' 
AND `dtName` LIKE '%%' 
AND `fiAuftrag` = `IdAuftrag` 
AND `fiKateg` = `IdKateg`  	
AND `fiArtId` = `idNoArt` 
AND `dtDatum` >= '0000-00-00' 
AND `dtDatum` <= '9999-12-31'
AND `dtGekauft` = 'j' 
Group BY `idLinie`

So jetzt hab ich noch das Problem ich muss dass ganze noch Sortieren können nur wie ich brauche ja das Resultat des Query oben um nach der ArtAnz u.s.w zu sortieren
nur müsste ich ja schon vor dem Query sortieren das bekomm ich aber nicht hin :-(

mfg
reyjr
 
Zuletzt bearbeitet:
So ganz verstehe ich Dein Anliegen noch nicht. Warum gruppierst Du in dem äußeren Query nach idLinie? Wenn ich Deine Struktur richtig überblicke kennzeichnet ein Datensatz in tblAuftragslinie einen Posten einer Bestellung und ist somit sozusagen die "kleinste Einheit".
Du gehst jedoch in Deinem inneren Query nicht auf diese Gruppierung ein, erhältst also, so meine Vermutung, die Summen zu einem Artikel mehrfach.

Kann es sein, dass folgende Aggregation hilfreicher ist?
SQL:
SELECT
  tblArtikel.idNoArt,
  tblArtikel.dtMarke,
  tblArtikel.dtName,
  tblArtikel.dtBesch,
  tblArtikel.dtBildUrl,
  tblArtikel.dtPreis,
  tblArtikel.dtStock,
  tblArtikel.dtFarbe,
  tblArtikel.dtGroesse,
  tblArtikel.dtPromo,
  tblArtikel.dtShowA,
  tblKategorie.IdKateg,
  tblKategorie.dtHauptkateg,
  tblKategorie.dtUnterKateg,
  tblKategorie.dtShow,
  SUM(tblAuftragLinie.dtKPreis * tblAuftragLinie.dtAnzahl) As ArtUmsatz,
  SUM(tblAuftragLinie.dtAnzahl) AS ArtAnz  
FROM tblArtikel
JOIN tblKategorie
  ON tblKategorie.IdKateg=tblArtikel.fiKateg
JOIN tblAuftragLinie
  ON tblAuftragLinie.fiArtId=tblArtikel.idNoArt
JOIN tblAuftrag
  ON tblAuftrag.idAuftrag=tblAuftragLinie.fiAuftrag
WHERE tblKategorie.IdKateg LIKE '%%'  	  
  AND tblArtikel.dtMarke LIKE '%%' 
  AND tblArtikel.dtName LIKE '%%' 
  AND tblAuftrag.dtDatum >= '0000-00-00' 
  AND tblAuftrag.dtDatum <= '9999-12-31'
  AND tblAuftrag.dtGekauft = 'j' 
GROUP BY idNoArt 
ORDER BY ArtAnz DESC
(Mögliche Syntax und Tippfehler bitte verbessern)

Gruß hpvw
 
Zurück