[MySQL 4.0] subquery alternative?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 4.0] subquery alternative?

    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
    +++++++++++++++++++++
    +table dayorder +
    +++++++++++++++++++++
    + oid + kundennr + datum + sumpos + nettosumme + bruttosumme+ ...
    +++++++++++++++++++++

    +++++++++++++++++++++
    +table orderpositionen +
    +++++++++++++++++++++
    + pid + oid + leistid + stck + .... +
    +++++++++++++++++++++

    +table leistungen
    +++++++++++++++++++++++++
    + leistid + nettoep + mwst-satz +
    +++++++++++++++++++++++++
    (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:

    PHP-Code:
    $doToday = array (
           
    "daily" => array(1005,1009,5977,8123,2100 ....),
           
    "weekly" => array(1025,1309,5477,3123,6130 ....),
           
    "monthly" => array(9825,1779,5077 ....),
    ); 
    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:
    PHP-Code:
    SELECT o.kundennrXXXXXXXXXXXXXX now( ) createdAS printed,
    IF (
    o.printed =AND o.lastchanged o.lastprinted10
    is_stornomino.datum date_frommaxo.datum date_tosumnetto nettosummesumbrutto bruttosumme
    (
    select @orders := concat_Ws',', @orders bestellnr ) , 
    orderlist
    FROM dayorder o LEFT JOIN kunden k ON o
    .kundennr k.kunr
    WHERE k
    .rechnungslegung =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 ?
    chansel0049
    ----------------------------------------------------
    if you've reached the bottomline - dig further!
    Übersetzer gesucht? http://www.babelport.com

  • #2
    Nach viel grübel grübel und studier wird nun auf 4.1 umgestiegen und die ganze schose ohne SUBSELECT realisiert


    GROUP_CONCAT
    chansel0049
    ----------------------------------------------------
    if you've reached the bottomline - dig further!
    Übersetzer gesucht? http://www.babelport.com

    Kommentar


    • #3
      [MySQL 4.1] group_concat

      ich fand dein Text sehr aufschlußreich, weil ich sebst ein ähnliches problem hatte und eben nach anhaltspunkten suchte.
      Das mit den @liste := ... kannte ich noch nicht. Könntest du mir hierzu vielleicht einen stichwort liefern.
      - man scheint eine variable in mysql zu speichern. - so richtig nützlich finde ich's, soweit ich damit rumexperimentierte nicht. - vielleicht würde mir eine beschreibung (bez. initialisierung und verankerung) die augen öffnen.

      Zu deinem problem: group_concat rulez!

      Kommentar

      Lädt...
      X