Hi,
habe projekt, bei dem rechnungen innerhalb eines intranets per mysql 4.0.18 und php erstellt werden und gedruckt müssen
folgende vorraussetzung kurz mal umrissen
(nur ein kleiner auszug zur verdeutlichung) ->
Für Leistungen die täglich beim Kunden erbracht werden (Reinigung, Essen, etc), werden Tagesbestellungen aufgenommen (obige Struktur), jedoch nach Kundenwunsch entweder per Tages-, Wochen- oder Monatsrechnung abgerechnet. Tag der Rechnungslegung kann je nach (Rechnungsart) variieren (montags, monttwochs, freitags, 1. 15. 30. etc.)...
Dabei gibt es meherer hundert - 1000 Kunden die pro Tag Rechnungen erhalten (ca. 1/3 je Art der Rechnung)
Annahme: Ich weis welche Kunden heute mit Rechnungnen bedacht werden müssen -> und habe einen Array mit Kunden etwa so:
Nun ist meine Überlegung dass ich für jedes Element von $doToday eine Query in folgender Art durchführe um die Tagesbestellungen aus [COLOR=crimson]dayorder[/COLOR] für den kunden zu finden, die in der Rechnung dann zusammengefügt werden müssen -- will dabei jedoch gern bereits die Summenbildungen etc durchführen:
Die Frage ist nun das XXXXXXXXXX , mit dem ich gern eine Kommalistein der [COLOR=crimson]oid der jeweiligen dayorders des Zeitraums[/COLOR] ( etwa so (5007,7887,8102,8877)) hätte , um dies dann in der Rechnungserstellung zu nutzen um die Einzelpositionen zu listen.
Mein Ansatz wäre da nun etwas wie [COLOR=seagreen]@list = concat_ws(',',oid)[/COLOR] innerhalb einer Subselect
--> Und das ist das Problem : Subselects in MySQL 4.0.18 ist nicht möglich
Ich könnte natürlich erst in einer Abfrage die Order-IDs bestimmen für jeden Kunden einzeln bestimmen, dann zusammenfügen und dann einer anderen Abfrage grupperien und aggregieren und dann in einer weiteren abfrage die Positionen listen. Aber dies würde bedeuten, bei ca. 1000 Kundenrechnungen, die automatisch (hatte ich das etwa vergessen) mit einem aufruf reusgehauen werden müssen, so ca. 1 (Kundenabfrage) + 1000 (Orderabfragen) * 1000 (Positionsabfragen) was nicht wirklich vertretar ist.
Hat jemand da ne Idee ?
habe projekt, bei dem rechnungen innerhalb eines intranets per mysql 4.0.18 und php erstellt werden und gedruckt müssen
folgende vorraussetzung kurz mal umrissen
+++++++++++++++++++++
+table dayorder +
+++++++++++++++++++++
+ oid + kundennr + datum + sumpos + nettosumme + bruttosumme+ ...
+++++++++++++++++++++
+++++++++++++++++++++
+table orderpositionen +
+++++++++++++++++++++
+ pid + oid + leistid + stck + .... +
+++++++++++++++++++++
+table leistungen
+++++++++++++++++++++++++
+ leistid + nettoep + mwst-satz +
+++++++++++++++++++++++++
+table dayorder +
+++++++++++++++++++++
+ oid + kundennr + datum + sumpos + nettosumme + bruttosumme+ ...
+++++++++++++++++++++
+++++++++++++++++++++
+table orderpositionen +
+++++++++++++++++++++
+ pid + oid + leistid + stck + .... +
+++++++++++++++++++++
+table leistungen
+++++++++++++++++++++++++
+ leistid + nettoep + mwst-satz +
+++++++++++++++++++++++++
Für Leistungen die täglich beim Kunden erbracht werden (Reinigung, Essen, etc), werden Tagesbestellungen aufgenommen (obige Struktur), jedoch nach Kundenwunsch entweder per Tages-, Wochen- oder Monatsrechnung abgerechnet. Tag der Rechnungslegung kann je nach (Rechnungsart) variieren (montags, monttwochs, freitags, 1. 15. 30. etc.)...
Dabei gibt es meherer hundert - 1000 Kunden die pro Tag Rechnungen erhalten (ca. 1/3 je Art der Rechnung)
Annahme: Ich weis welche Kunden heute mit Rechnungnen bedacht werden müssen -> und habe einen Array mit Kunden etwa so:
PHP-Code:
$doToday = array (
"daily" => array(1005,1009,5977,8123,2100 ....),
"weekly" => array(1025,1309,5477,3123,6130 ....),
"monthly" => array(9825,1779,5077 ....),
);
PHP-Code:
SELECT o.kundennr, XXXXXXXXXXXXXX , now( ) created, 0 AS printed,
IF (
o.printed =1 AND o.lastchanged > o.lastprinted, 1, 0
) is_storno, min( o.datum ) date_from, max( o.datum ) date_to, sum( netto ) nettosumme, sum( brutto ) bruttosumme,
(
select @orders := concat_Ws( ',', @orders , bestellnr ) ,
) orderlist
FROM dayorder o LEFT JOIN kunden k ON o.kundennr = k.kunr
WHERE k.rechnungslegung =1 AND o.datum
BETWEEN '20050520' AND '20050629'
GROUP BY o.kundennr
Die Frage ist nun das XXXXXXXXXX , mit dem ich gern eine Kommalistein der [COLOR=crimson]oid der jeweiligen dayorders des Zeitraums[/COLOR] ( etwa so (5007,7887,8102,8877)) hätte , um dies dann in der Rechnungserstellung zu nutzen um die Einzelpositionen zu listen.
Mein Ansatz wäre da nun etwas wie [COLOR=seagreen]@list = concat_ws(',',oid)[/COLOR] innerhalb einer Subselect
--> Und das ist das Problem : Subselects in MySQL 4.0.18 ist nicht möglich
Ich könnte natürlich erst in einer Abfrage die Order-IDs bestimmen für jeden Kunden einzeln bestimmen, dann zusammenfügen und dann einer anderen Abfrage grupperien und aggregieren und dann in einer weiteren abfrage die Positionen listen. Aber dies würde bedeuten, bei ca. 1000 Kundenrechnungen, die automatisch (hatte ich das etwa vergessen) mit einem aufruf reusgehauen werden müssen, so ca. 1 (Kundenabfrage) + 1000 (Orderabfragen) * 1000 (Positionsabfragen) was nicht wirklich vertretar ist.
Hat jemand da ne Idee ?
Kommentar