[MySQL 4.0] TRANSFORM Query

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

  • [MySQL 4.0] TRANSFORM Query

    Hi an alle,

    denke dass hier ist tricky:

    Ich will die in Access (Jet) SQL mögliche Transform- Query in MySQL darstellen. Folgende Ausgangstabellen (gekürzt):

    -----------------------------
    | table orders |
    -----------------------------
    | oid (PK) | datum ....
    -----------------------------
    | 1 | 20051202 |
    | 2 | 20051203 |
    | 3 | 20051203 |

    ----------------------------------------------
    | table orderpos |
    ----------------------------------------------
    | oid (PK)| pid (PK) | ordered (int).
    ----------------------------------------------
    | 1 | 1 | 10 |
    | 1 | 3 | 7 |
    | 1 | 4 | 12 |
    | 2 | 2 | 21 |
    | 3 | 1 | 1 |
    | 3 | 2 | 1 |
    | 3 | 3 | 2 |
    | 3 | 4 | 1 |
    ----------------------------------------
    table products
    ----------------------------------------
    pid | beschreibung | Preis ....
    ----------------------------------------
    | 1 | Baum | 6 |
    | 2 | Haus | 6 |
    | 3 | Bach | 6 |
    | 4 | Berg | 6 |
    ____________________________
    aus diesen soll nun für verschiedenste Zwecke (Wochenrechnung, Analyse , Statistik etc) eine Transform-Tabelle nach dem Muster:

    _____________________________________
    | oid | datum | pid_1 | pid_2 | pid_3 | pid_4 ....
    -----------------------------------------------------------
    | 1 | 20051202 | 10 | NULL | 7 | 12 |
    | 2 | 20051202 | NULL | 21 | NULL | NULL|
    | 3 | 20051202 | 1 | 1 | 2 | 1 |
    -----------------------------------------------------------
    Mein Ansatz ist dabei folgendeer:

    per PHP wird dynamisch eine SQL Abfrage erstellt die (hier jetzt statisch) etwa so aussieht:

    PHP-Code:
    SELECT o.oido.datum p1.ordered pid_1p2.ordered pid_2p3.orderd pid_3p4.orderd pid_4
    FROM orders o 
              LEFT JOIN orderpos p1 ON o
    .oid=p1.pid
              LEFT JOIN orderpos p2 ON o
    .oid=p2.pid
              LEFT JOIN orderpos p3 ON o
    .oid=p3.pid
              LEFT JOIN orderpos p4 ON o
    .oid=p4.pid
    WHERE 
             p1
    .pid AND
             
    p2.pid AND 
             
    p3.pid AND
             
    p4.pid AND 
    Dies funktioniert auch bei Rows die keine NULL Werte enthalten, dort jedoch, wo durch das LEFT JOIN ein NULL korrekt erzeugt wird, wird es durch die WHERE -Bedingung wieder eliminiert

    Hat jemand da mal einen Anstoß parat, bin hier gerade auf dem Draht ....

    Danke schonmal
    Zuletzt geändert von chansel0049; 30.05.2005, 11:47.
    chansel0049
    ----------------------------------------------------
    if you've reached the bottomline - dig further!
    Übersetzer gesucht? http://www.babelport.com

  • #2
    where filtert immer das Ergebnis. wasfür Verknüpfung hast du in den Bedingungen? ich nehme an AND, dann sollst du dich nicht wundern. Mit OR könntest du zum Ziel kommen

    Kommentar


    • #3
      Hast natürlich recht, AND stand da.

      Das OR ist jedoch keine Lösung, da dadurch eine komplette PERMUTATION entsteht, die jedoch nicht gewollt ist:



      OffTopic:

      | 1 | 20051202 | 10 | 21 | 7 | 12 |
      | 2 | 20051202 | 10 | 21 | 7 | 12 |
      | 3 | 20051202 | 10 | 21 | 7 | 12 |

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

      Kommentar


      • #4
        Hm... und was ist mit:

        LEFT JOIN orderpos p1 ON (o.oid=p1.pid AND p1.id=1)
        LEFT JOIN orderpos p2 ON (o.oid=p2.pid AND p2.id=2)
        ...


        und dafür entfällt WHERE

        Kommentar


        • #5


          Multiple ON Conditions ? Dachte immer das geht nicht! Naja wieder was gelernt

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

          Kommentar

          Lädt...
          X