You are not logged in.

wcf.regNote.message

Artanis

Beginner

  • "Artanis" started this thread

Posts: 22

Location: VR

Occupation: Systementwickler

  • Send private message

1

Tuesday, September 22nd 2009, 11:56am

Übersicht für monatliche Zahlungen

Hallo zusammen,
für eine Webanwendung soll ich eine Funktion schreiben, in welcher die monatliche Zahlungseingänge von Kunden angezeigt werden.
In meiner Datenbank habe ich dafür 2 Tabellen.
Zum einen "vertraege", in welcher steht, von wann bis wann ein Vertrag mit welchen Kosten gültig ist.
Das Beispiel bedeutet, dass ein Vertrag am 01.01.2009 beginnt und am 01.09.2009 endet und sich aus den Kosten 10+20 zusammensetzt
id, kunde, typ, datum, kosten1, kosten2
1, 1, 1, 2009-01-01 00:00:00, 10, 20 (Vertragsbeginn)
2, 1, 0, 2009-09-01 00:00:00, 0, 0 (ist prakisch eine Kündigung, da typ=0)
Der Vertrag kann auch gekündigt und ein paar Monate später ein neuer mit anderen Kosten erstellt werden.
Die Zahlungseingänge sind in der tabelle "zahlungen"
id, kunde, zahlung, datum
1, 1, 30, 2009-01-01 00:00:00 (Zahlung von 30 Euronen im Januar)
1, 1, 20, 2009-02-01 00:00:00 (Zahlung von 20 im Febr.)
Problem:
Ich möchte nun alle Zahlungen in dem Zeitraum Januar bis einschl. August inkl. der nicht vorhandenen für beispielsweise März ausgegeben haben. Die Lücken zwischen Verträgen müssen ausgelassen werden.
Alles, was ich brauche, ist die SQL-Abfrage dafür
Wäre super, wenn da jemand eine Idee hätte..
Danke im Vorraus
:cbcool:

flo

Unregistered

2

Tuesday, September 22nd 2009, 8:39pm

http://dev.mysql.com/doc/refman/5.1/de/c…-operators.html
denke mal du suchst so etwas wie das "between"-statement

MySQL queries

1
select * from zahlungen where (( kunde='$kunde') AND (datum between '2009-01-01' AND '2009-09-01')) order by datum ASC

ob asc oder desc, kannste dir ja aussuchen was dir lieber ist... :P

das statement holt datensätze aus zahlungen von einem Kunden im Zeitraum zwischen 1.1.09 und 1.9.09... die 2 werte kannst du auch mit variablen belegen wie weiter vorne bei kunde... und die ergebnisse (zahlungen) werden nach dem datum sortiert...
wenn das nicht das ist, was du suchst, müsstest du vllt nochmal erklären was du genau meinst....
allerdings finde ich, dass das komisch realisiert ist ...
du könntest zb in der tabelle "verträge" für jeden kunden EINEN datensatz anlegen und einfach ne spalte dazu legen in der das ende des vertrages steht:
also :
ID (primary key und auto_increment), kunde, vertragsbeginn, vertragsende, kosten1, kosten2 (was die 2 kosten auf sich haben, bin ich mir nich so sicher...)
damit wär die spalte typ dann überflüssig...
hoffe ich konnte helfen.

Artanis

Beginner

  • "Artanis" started this thread

Posts: 22

Location: VR

Occupation: Systementwickler

  • Send private message

3

Friday, September 25th 2009, 11:12am

Danke für die Antwort, allerdings ist die Lösung nicht ganz so simpel ;)
Zum einen müssen die Verträge in der gleichen Abfrage aus der Datenbank geholt werden (Für die Kosten, Start und Ende) und zum anderen ist nicht gesagt, dass ein Vertrag immer aus Anfang und Ende besteht. es können durchaus 2 Anfänge hintereinander (eine Art Vertragsänderung) und ein offenes Ende oder sogar Pausen zwischendurch gesetzt sein.
Meine Lösung wird zwar nicht die schönste, aber es sollte funktionieren.
Aus der DB lade ich in einer Abfrage beide Tabellen und verknüpfe sie mit INNER JOINs oder subselects. Die Kosten addiere ich mit sql-seitig.
Mit meinem PHPscript speichere ich die letzte Vertragsänderung und multipliziere die mit der Anzahl der dazwischenliegenden Monaten und den Kosten. Dann kann man die Summen im Script vergleichen und sehen, ob alles eingehalten wurde etc.
Ich hoffe, dass ich noch etwas schöneres finde :D
:cbcool:

ShaoKhan

www.Spiegelwelt.com

Posts: 393

Location: 127.0.0.1

Occupation: EDV Dienstleister

  • Send private message

4

Monday, October 12th 2009, 10:05am

Also deiner letzten Antwort entnehm ich, das SQL für dich kein Neuland ist.
Einen Ansatz hast ja bekommen (den du evtl. selber schon hattest).
Ich glaub nicht, das dir hier jemand deine Arbeit abnimmt. Hier wird sicher geholfen, wir sind aber niemand der die Arbeit anderer macht.
Nix für ungut,

ShaoKhan
Leben heisst - Narben tragen.

wcf.user.socialbookmarks.titel