wenn ich nun die zu zahlenden Beiträge für Nutzer 1 und den Zeitraum 01.01.2009 - 31.12.2009 abrufen möchte, so soll er alle Datensätze durchsuchen und aus Zeile ID 2 mir für Januar - September 15 liefern und für Oktober - Dezember NULL (Id 99) als Array ausgeben.
Bei Nutzer 1 müsste dann ein Array(15;15;15;15;15;15;15;15;15;15;10;10)
Leider weiß ich nicht wie ich in einem solchem Fall die Abfrage formulieren soll.
Du hast mich jetzt verworren: In den Beispielsdatensatz tauchen Werte auf die zeitlich gesehen nicht relevant sind, aber Du referenzierst mit Zeilen-ID 2 darauf. Oder meinst Du statt Zeilen-ID etwa den Nutzer 2?
Was Du benötigst ist ein Gruppierung über das Datum (nicht tagesweise sondern monatsweise). Und hier fehlt zur weiteren Detaillierung Deine Angabe über das verwendete Datenbanksystem.
Desweiteren gibt SQL normalerweise keine Array heraus und auf keinen Fall Informationen über nicht vorhandene Datensätze. Wenn Du die Monatsinformationen jedoch angezeigt haben willst, must Du eine Tabelle mit den Monatsnamen mittels LEFT bzw RIGHT-JOIN beimischen. Solltest Du Array eine Zeile pro Nutzer meinen, suche bitte im Archiv nach dem Thema transponieren.
ich wollte dich nicht verwirren. Sorry !
Ich schreibe in meiner Datenbank: Id für Zeilennummer Nutzer_ID ist die Nummer des Mitgliedes ich z.B. 1 das Datum beziet sich auf den Tag ab wo ein besímmter Beitrag gilt und Wert für den Beitrag also würde ich alle mich betreffenden daten ausgeben so hätte ich
ID - Nutzer - Datum - Wert (Info)
1 - 1 - 2002.01.01 - 15 (Eintritt in den Verein mit 15 € Beitrag)
…
106 - 1 - 2009.11.01 - 10 (Der beitrag wird auf 10 € gesenkt)
…
187 - 1 - 2010.01.01 - NULL (Ich bin aus dem Verein Ausgetreten)
200 - 1 - 2010.06.01 - 10 (nun bin ich wieder dabei)
Somit gilt vom 01.01.2002 bis 31.10.2009 der Beitrag von 15 €
ab 01.11.2009 bis 31.12.2009 ein Beitrag von 10 € danach garnichts (NULL) und ab 01.06.2010 müßte ich dann wieder 10 € Bezahlen.
ich hoffe ich habe das ganze nun ein wenig verständlicher erklärt um verwirrungen zu unterbinden
den Aufbau der Datenbank hatte ich schon verstanden, nur wird dieses Datenmodell normalerweise verwendet, wenn man jeden Zahlungseingang protokolliert. Für Einträge an den Zeitpunkten, an den sich Änderungen ergeben wählt man normalerweise ein Datenstruktur mit zwei Datumsattributen (Datum_von und Datum_bis). Das erspart einem die Suche nach Nachfolgedatumssätze (Self-Join der Tabelle).
Aber zur weiteren Hilfe hast Du die Fragen nach dem Datenbank-System nicht beantwortet.
Auweia!
Datum ist nicht ISO (2009-01-01) und Spaltennamen mit Großbuchstaben solltest du dir in Zukunft auch verkneifen. Zahlen ebenso und reservierte Begriffe (z. B. alter).
Soviel mal zum Grundsätzlichen.
wenn ich nun die zu zahlenden Beiträge für Nutzer 1 und den
Zeitraum 01.01.2009 - 31.12.2009 abrufen möchte, so soll er
alle Datensätze durchsuchen und aus Zeile ID 2 mir für Januar
September 15 liefern und für Oktober - Dezember NULL (Id 99)
als Array ausgeben.
Bei Nutzer 1 müsste dann ein
Array(15;15;15;15;15;15;15;15;15;15;10;10)
Leider weiß ich nicht wie ich in einem solchem Fall die
Abfrage formulieren soll.
SELECT wert
FROM meinetabelle
WHERE datum BETWEEN ‚2009-01-01‘ AND ‚2009-12-31‘ AND nutzer = ‚2‘
ORDER BY datum
Ich befürchte nur, daß das Statement wegen deines nicht ISO-konformen Datums eine Fehlermeldung produziert.
In dem Fall musst du an der DB nacharbeiten.
Sorry aber das Datum ist als Date mit (-) gespeichert ich empfand es nur günstiger mit Punkt zu schreiben da der Rest meiner Auflistung durch Bindestrich getrennt ist.
die Spaltenköpfe werden klein geschrieben ??? aha und warum ???
Auf jeden Fall erstmal danke !!!
Nur leider kann ich mit betwenn nur Werte verwenden welche in der Tabelle auch vorhanden sind.
So ich für Nutzer 1 alle Buchungen für 2008 haben möchte gibt es keinen Datensatz der auch nur im entferntesten eine 2008 enthält. Da der Beitrag 2002 bei 15 € Lag und erst 2009 auf 0 gesetzt wurde. aber ich werde es mal mit dem einfügen einer Neuen Spalt versuchen und immer ein gültig von-bis setzen so habe ich wenigstens einen bereich in dem ich suchen kann.
Der Dummiiii bedankt sich und sagt erst mal Tschüß
ist die Abfrage bzw das Datenmodell noch aktuell? Das Statement von widecrypt würde Dir übrigens nur die Änderungen einer Zahlung herausgeben. Und die Datumswerte die Du bei BETWEEN verwendest müssen nicht(!) in den Daten vorkommen, denn
WHERE datum BETWEEN '2009-01-01' AND '2009-12-31'
ist eine kurzschreibweise für
WHERE datum \>= '2009-01-01'
AND datum
MfG Georg V.