Mailinglisten-Archive |
Sven Eicher schrieb:
>>>Nun möchte ich den aktuellen Stand, also die Menge an Einnahmen nach
>>>Abzug der Ausgaben wissen.
>>>
>>>SELECT namen.name,
>>> SUM(einnahmen.menge) - SUM(ausgaben.menge) AS bestand
>>> FROM namen, einnahmen, ausgaben
>>> GROUP BY namen.p_id
>>>
>>>Aber irgendwo hab ich da wohl einen mächtigen Denkfehler drin.
>>
>>vielleicht solltest du MySQL noch sagen _wie_ er die Tabellen verknüpfen
>>soll, nämlich anhand der `p_id`
>>entweder im WHERE
>>oder noch besser gleich per LEFT JOIN mit ON oder USING
>
>
> Hab es so probiert:
>
> SELECT namen.name, SUM( einnahmen.menge ) - SUM( ausgaben.menge ) AS bestand
> FROM namen
> LEFT JOIN ausgaben ON namen.p_id = ausgaben.p_id
> LEFT JOIN einnahmen ON namen.p_id = einnahmen.p_id
> GROUP BY namen.p_id
>
> Aber die Berrechnug ist dennoch falsch.
> Die Ausgaben werden korrekt von den Einnahmen abgezogen, aber dann wird das
> Ergebnis wieder mit den Einnahmen addiert und als Endergebnis ausgegeben.
>
> Mit meinen Beispielzahlen wäre das dann:
> 1000 - 50 -100 + 1000 = 1850
>
> Ich verstehs nicht )-:
logisch ist es schon:
name einnahmen ausgaben
test 1000 100
test 1000 50
macht:
name SUM(einnahmen) SUM(ausgaben)
test 2000 150
macht:
name bestand
test 850
einfacher wäre:
CREATE TABLE `ausgaben` (
`p_id` int(11) NOT NULL default '0',
`menge` int(11) NOT NULL default '0',
KEY `p_id` (`p_id`)
) TYPE=MyISAM;
INSERT INTO `ausgaben` VALUES (1, 100);
INSERT INTO `ausgaben` VALUES (1, 50);
INSERT INTO `ausgaben` VALUES (1, -1000);
CREATE TABLE `namen` (
`p_id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL default '',
PRIMARY KEY (`p_id`)
) TYPE=MyISAM;
INSERT INTO `namen` VALUES (1, 'test');
SELECT `namen`.`name`,
SUM(`ausgaben`.`menge`) AS `bestand`
FROM `namen`
LEFT JOIN `ausgaben`
USING (`p_id`)
GROUP BY `namen`.`p_id`
p.s. dir fehlen die Indizes auf `p_id`
--
Sebastian Mendel
www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime www.sf.net/projects/phptimesheet
php::bar PHP Wiki - Listenarchive