Mailinglisten-Archive |
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