phpbar.de logo

Mailinglisten-Archive

=?iso-8859-1?Q?RE:_mehrere_SUM's_=FCber_mehrere_tables?=

RE: mehrere SUM's über mehrere tables

Michael Donning donning@informenta.de
Fri Dec 20 17:17:05 2002


Hallo Felix

> -----Original Message-----
> ich habe 3 tables, im ersten sind produkte definiert die einen INT
> PRIMARY key haben.
>
> die zwei anderen tables beinhalten referenzen zu diesen produkten
> (lagerbestand und verkäufe) also z.B.:
>
>...
> SELECT
>
> artikelstamm.id,
> artikelstamm.name,
> SUM(lagerbestand.anzahl) AS lagerbestand,
> SUM(verkaeufe.anzahl) AS sales
>
> FROM artikelstamm
> LEFT JOIN lagerbestand ON lagerbestand.produktid=artikelstamm.id
> LEFT JOIN verkaeufe ON verkaeufe.produktid=artikelstamm.id
>
> GROUP BY artikelstamm.id
> --
>
> Kann es sein dass mysql das gar nicht kann? oder habe ich nur einen
> syntaktischen oder logischen fehler?

Ja es ist ein logischer Fehler, das Problem ist das "Kartesische Produkt"
(heißt es so?). D.h. Du bekommst jede Zeile für einen Artikel in
Lagerbestand so oft, wie es den Artikel in verkäufe gibt (und damit auch
umgekehrt).

Normal würde man zwei group by Abfragen machen jeweils eine mit join auf
lagerbestand und eine mit join auf verkaeufe diese dann mit union verbinden
und dann über die union einen weiteren group und sum laufen lassen. Ab der
4.x Version beherrscht mysql union, aber ob dann noch ein group by auf eine
union erlaubt ist weiß ich nicht.

Eine weitere Möglichkeit fällt mir ein:

Du arbeitest mit temporären Tabellen. Du erstellst eine Tabelle mit den 4
Spalten Deiner Abfrage.
Du wirfst (in Nachbildung der Union) per Insert eine LeftJoin Abfrage auf
die 1. Tabelle in die temp-tabelle (die fehlenden Summen-Felder sollten 0
und nicht null sein). Dann ein Insert mit der 2. Tabelle und am Schluß dann
summenmäßig die temp-tabelle abfragen.

Alles klar? :)

Ich hoffe ich habe dich mit den Denkanstößen nicht umgeworfen.

Grüße Michael Donning

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive