Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL Summen - Listen bilden (https://www.delphipraxis.net/150094-mysql-summen-listen-bilden.html)

Mavarik 7. Apr 2010 08:31

Datenbank: MySQL • Version: 5.x • Zugriff über: SciBit Komponenten Direkt

MySQL Summen - Listen bilden
 
Hallo Zusammen, an alle (My)SQL freaks... ;-)

Ich habe folgende Problemstellung:

Datum Nr Betrag Summe (Sortiert nach Datum,Nummer)

Eine einfache Datenbank... Leider mit recht vielen Datensätzen.

In diese Liste sollen an beliebigen Stellen (Datum) Datensätze eingefügt/gelöscht werden oder
Betrag die in der List stehen sollen verändert werden.

Aufgabenstellung ist, dass "augenblicklicht" alle Summen der folgenden Datensätze wieder den
"richtigen" Wert haben. Was ist hierfür der beste Weg?

Grüsse Mavarik :mrgreen:

Bernhard Geyer 7. Apr 2010 08:43

Re: MySQL Summen - Listen bilden
 
Mein Vorschlag:

Redundante Tabelle die diese Summenwerte beinhalten und ein Trigger auf die ursprüngliche Tabelle der dann die Summenwerte in der redundanten Tabelle aktualisiert.

rapante 7. Apr 2010 08:44

Re: MySQL Summen - Listen bilden
 
Hallo Mavarick

Das kannst du über ein Update-Statement realisieren.
Das müsste dann ungefähr so aussehen:
SQL-Code:
 UPDATE tabelle SET summe = (SELECT SUM(Betrag) FROM tabelle) WHERE 1=1;
Wenn ich es richtig verstanden habe, hast du für jeden Datensatz die Summe der Beträge
aller Datensätze gespeichert?!
In diesem Fall solltest du deine Tabellenstruktur nochmals überdenken.
(Es sei denn du speicherst die Summe aus Performancegründen :wink: )

Mavarik 7. Apr 2010 08:45

Re: MySQL Summen - Listen bilden
 
Zitat:

Zitat von Bernhard Geyer
Mein Vorschlag:

Redundante Tabelle die diese Summenwerte beinhalten und ein Trigger auf die ursprüngliche Tabelle der dann die Summenwerte in der redundanten Tabelle aktualisiert.

Hallo Bernhard...

1. Nicht verstanden :stupid:
2. Wie und was bringt eine 2. Tabelle :stupid:

Mavarik :stupid:

Mavarik 7. Apr 2010 08:48

Re: MySQL Summen - Listen bilden
 
Zitat:

Zitat von rapante
Hallo Mavarick
Wenn ich es richtig verstanden habe, hast du für jeden Datensatz die Summe der Beträge
aller Datensätze gespeichert?!
In diesem Fall solltest du deine Tabellenstruktur nochmals überdenken.
(Es sei denn du speicherst die Summe aus Performancegründen :wink: )

NEIN...

Man könnte das mit einem Kontoauszug vergleichen, nur das der sich laufend ändert...

Es soll jeder Betrag's Eintrag den Saldo bis zu diesem Tag mitführen.

Mavarik

rapante 7. Apr 2010 08:56

Re: MySQL Summen - Listen bilden
 
dann eben so:
SQL-Code:
UPDATE tabelle t1 SET t1.summe = (SELECT SUM(t2.Betrag) FROM tabelle t2 WHERE t2.datum <= t1.datum AND t2.nr < t1.nr) WHERE 1=1;

Mavarik 7. Apr 2010 09:19

Re: MySQL Summen - Listen bilden
 
Also entweder verstehe ich es nicht mit t1 und t2 oder ich drücke mich falsch aus.
Hier nochmal ein Beispiel:

SQL-Code:
01.01.2000  +100,00   +100,00
02.01.2000  - 50,00   + 50,00
03.01.2000  -300,00   -250,00
04.01.2000  +100,00   -150,00
05.01.2000  +100,00   - 50,00
06.01.2000  +100,00   + 50,00
Wenn ich die -50,00 vom 02.01.2000 auf + 50 ändere müssen alle Datensätze danach
um den Betrag von 100,00 geändert werden.

Mavarik

DeddyH 7. Apr 2010 09:39

Re: MySQL Summen - Listen bilden
 
Ich hab von Triggern in MySQL keine Ahnung, aber möglicherweise könnte das so funktionieren:
SQL-Code:
new.Saldo = old.Saldo + (new.Betrag - old.Betrag);
UPDATE Tabelle
SET Saldo = Saldo + (new.Betrag - old.Betrag)
WHERE Datum > new.Datum;

Mavarik 7. Apr 2010 09:49

Re: MySQL Summen - Listen bilden
 
Zitat:

Zitat von DeddyH
Ich hab von Triggern in MySQL keine Ahnung, aber möglicherweise könnte das so funktionieren

OK Das funktioniert sicherlich... Aber dauert ewig, oder?

Mavarik

rapante 7. Apr 2010 09:51

Re: MySQL Summen - Listen bilden
 
t1 & t2 sind nur aliase für die tabelle, weil die selbe Tabelle 2 mal verwendet wird.

das Updatestatement würde alle Summen(Salden) der Tabelle aktualisieren.
Das geht sicherlich auch performanter, aber das Beispiel ist auch nur als Denkanstoß gedacht :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz