KOMPLEX: Werte dynamisch je nach Variablenwert anzeigen

FRitter

Erfahrenes Mitglied
Hallo an alle (hatte echt keine Ahnung, wie ich mein Problem im Titel besser beschreiben sollte, sorry)!

Es ist jedenfalls eine komplexere Aufgabe, für die ich eine komplette PHP-Lösung brauche, da ich mit meinen "Künsten" am Ende bin...

Das Script soll dynamisch je nach Kunde eine Tabelle ausgeben, die wie folgt aussehen soll (Werte in () dienen nur zur Hilfe):


Code:
---------------------------------------------------------------------
Rechnungen
---------------------------------------------------------------------
2005 (akt.Jahr)             Rechnung 01/2005 (Link zu PDF-Datei)

2004 (akt. Jahr-1)          Rechnung 12/2004 (")
                            Rechnung 11/2004 (")
                            Rechnung 10/2004 (")
                               [.....]
                            Rechnung 02/2004 (")
                            Rechnung 01/2004 (")

2003 (akt. Jahr-2)          Rechnung 12/2003 (")
                            Rechnung 11/2003 (")
                               [.....]
---------------------------------------------------------------------


Das ganze soll so lange ausgeführt werden, bis folgende Werte erreicht sind:

$Datum_Monat und $Datum_Jahr (diese beiden Werte werden aus einer DB gelesen und bedeuten, dass bis zu diesem Zeitpunkt die Rechnungen abrufbar sein sollen - den Zeitraum davor nicht!

Alles klar ? :rolleyes:
Hat jemand so etwas schonmal in PHP realisiert? Alles im einzelnen klingt nicht so schwierig, aber als ganzes hab' ich es nicht geschafft, doch wohl etwas komplexer, was meint ihr ?
 
Zuletzt bearbeitet:
Mach das ganze doch einfach über 2 For-Schleifen, eine für die Jahre, eine für die Monate. In diesen prüfst du, ob deine Abbruchbedingung erfüllt ist und gibst nur eine entsprechende Anzahl von Rechnungen aus.
 
Hm ich will ja jetzt nicht nerven, aber Monat und Jahr separat zu speichern halte ich für keine besonders gute Lösung. Mach lieber einen Timestamp, da hast du alle Informationen gleich drin. Du kannst ja bei deinem Eingabeformular (oder wie auch immer die Daten in die DB kommen) den Monat und das Jahr mit [phpf]mktime[/phpf] in einen Timestamp konvertieren.
 
In der DB kannst Du das Rechnungsdatum als DATE speichern.

Mit dem Query (könnten Fehler drin sein, habe ich hier im Editor getippt) erhältst Du alle Rechnungen, vom aktuellen Jahr und den 2 vorigen Jahren:

Code:
SELECT YEAR(rechnungsDatum) AS jahr, MONTH (rechnungsDatum) AS monat, ... FROM rechnungen WHERE YEAR(rechnungsDatum) <= YEAR(NOW()) AND YEAR(rechnungsDatum)>=YEAR(NOW())-2 ORDER BY rechnungsDatum DESC;

Oder alternativ, etwas kürzer, die letzten z.B. 30 Rechnungen:

Code:
SELECT YEAR(rechnungsDatum) AS jahr, MONTH (rechnungsDatum) AS monat, ... FROM rechnungen ORDER BY rechnungsDatum DESC LIMIT 0,30;

Zeige mal Deine Tabellenstruktur, dann ließe sich in das Query mit einem JOIN auch gleich das Datum aufnehmen, bis wann die Rechnungen ausgelesen werden sollen, ohne dass Du dieses vorher extra mit PHP ermittelst. Wenn dieses in der Tabelle kunden im Feld rechnungenSichtbarBis als DATE gespeichert ist, dann sollte das so funktionieren:
Angenommen folgende Tabellenstruktur:

Tabelle rechnungen mit folgenden Feldern:
rechnungsID INT
rechnungsDatum DATE
kundenID INT
rechnungsPDF CHAR

Tabelle kunden mit folgenden Feldern:
kundenID
rechnungenSichtbarBis DATE
weitere Kundendaten

Code:
SELECT YEAR(rechnungsDatum) AS jahr, MONTH (rechnungsDatum) AS monat, rechnungsPDF FROM rechnungen LEFT JOIN kunden ON (kunden.kundenID=rechnungen.kundenID) WHERE rechnungen.rechnungsDatum>kunden.rechnungenSichtbarBis AND kunden.kundenID=IDdesBetrachtetenKunden ORDER BY rechnungsDatum DESC;
 
Zurück