phpbar.de logo

Mailinglisten-Archive

[dbs] addieren und subtrahieren

[dbs] addieren und subtrahieren

Sven Eicher phpbar at koalashome.de
Sam Jun 26 19:36:42 CEST 2004


> > 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 )-:


Meine Testtabellen:

CREATE TABLE `ausgaben` (
  `v_id` int(11) NOT NULL auto_increment,
  `p_id` int(11) NOT NULL default '0',
  `menge` int(11) NOT NULL default '0',
  PRIMARY KEY  (`v_id`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;
INSERT INTO `ausgaben` VALUES (1, 1, 100);
INSERT INTO `ausgaben` VALUES (2, 1, 50);

CREATE TABLE `einnahmen` (
  `b_id` int(11) NOT NULL auto_increment,
  `p_id` int(11) NOT NULL default '0',
  `menge` int(11) NOT NULL default '0',
  PRIMARY KEY  (`b_id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
INSERT INTO `einnahmen` VALUES (1, 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 AUTO_INCREMENT=4 ;
INSERT INTO `namen` VALUES (1, 'test');


-- 
Koala

php::bar PHP Wiki   -   Listenarchive