phpbar.de logo

Mailinglisten-Archive

[dbs] addieren und subtrahieren

[dbs] addieren und subtrahieren

Sebastian Mendel lists at sebastianmendel.de
Die Jun 29 09:55:34 CEST 2004


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