AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL Summen - Listen bilden
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Summen - Listen bilden

Ein Thema von Mavarik · begonnen am 7. Apr 2010 · letzter Beitrag vom 14. Apr 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#1

MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 08:31
Datenbank: MySQL • Version: 5.x • Zugriff über: SciBit Komponenten Direkt
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 08:43
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#3

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 08:44
Hallo Mavarick

Das kannst du über ein Update-Statement realisieren.
Das müsste dann ungefähr so aussehen:
 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 )
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 08:45
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
2. Wie und was bringt eine 2. Tabelle

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 08:48
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 )
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
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#6

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 08:56
dann eben so:
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;
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 09:19
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 09:39
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 09:49
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
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
171 Beiträge
 
Delphi XE2 Professional
 
#10

Re: MySQL Summen - Listen bilden

  Alt 7. Apr 2010, 09:51
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
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