[SQL] Bestellabfrage alle

Dieses Thema im Forum "Webentwicklung" wurde erstellt von master2005, 4. Mai 2013 .

  1. 4. Mai 2013
    Bestellabfrage alle

    Hallo zusammen,

    ich komme leider seit 2 Stunden nicht weiter.
    Ich habe 3 Tabellen, die ich verknüpfen will. Leider habe ich probleme mit dem Aufbau.

    tabelle = product
    tabelle = product_order_details
    tabelle = product_order

    Ich möchte alle Produkte,Preise und Details zur Bestellung zur jeweiligen Bestellnummer ausgeben.

    Was möchte ich?
    Alle Bestellungen aus der DB-> alle darin enthaltenen Produkte der Bestellnummer (immer mehrere) -> alle Details der Bestellnummer Bestelldetails.

    Mein Ansatz ist:

    Code:
    $query = sprintf("SELECT
     o.ID,
     o.productID,
     o.order_number,
     o.amount,
     o.price,
     od.shipping_price,
     od.status,
     od.date,
     od.invoice,
     od.print,
     (SELECT SUM(price * amount) FROM product_order WHERE order_number = o.order_number) AS price
     FROM product_order AS o JOIN product_order_details AS od JOIN product AS p
     WHERE
     od.print = 0 AND od.order_number = o.order_number GROUP BY o.order_number"
    
     );
     $result = mysql_query($query);
    
     IF(mysql_num_rows($result) == 0){echo "<div class='warning'>Keine neue Bestellungen vorhanden</div>";}
    
     while($o = mysql_fetch_object($result))
     {
     $all_sum = $o->price + $o->shipping_price;
    
    
     //Bestellnummer ausgeben
     //dazugehörigen detais von der Tabelle product_order_details
     //alle Prudukte ausgeben die zur jeweiligen Bestellnummer gehören aus product
    
     }
    

    oder

    Code:
    SELECT
     o.ID,
     o.productID,
     o.order_number,
     o.amount,
     o.price,
     od.shipping_price,
     od.STATUS,
     od.date,
     od.invoice,
     od.print,
     p.name,
     (SELECT SUM(price * amount) FROM product_order WHERE order_number = o.order_number) AS price
     FROM product AS p JOIN product_order AS o JOIN product_order_details AS od
     WHERE
     p.ID = o.productID
    
    
    aber dann kommt das als Ausgabe und ich möchte ja das,dass nach Bestellnummer gruppiert wird. Dies geht aber nicht, dann kommt nur ein Produkt aus der Betsellung jeweils


    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Dekostoff bedruckt, gold - 4

    Bestellnummer:50002
    Stabkerze, grün - 3

    Bestellnummer:50002
    Stabkerze, grün - 3

    Bestellnummer:50002
    Stabkerze, grün - 3

    Bestellnummer:50002
    Stabkerze, grün - 3

    Bestellnummer:50002
    Stabkerze, grün - 3

    Bestellnummer:50002

    usw.
     
  2. 4. Mai 2013
    AW: Bestellabfrage alle

    JOINs sind das Stichwort

    Code:
    SELECT * 
    FROM product_order po
    JOIN (product_order_details pod ON pod.order_id = po.order_id)
    JOIN (rel_product_order rpo ON rpo.order_id = po.order_id)
    JOIN (product p ON p.product_id = rpo.product_id)
    
    Bzw. in der Theorie würde es mehr Sinn machen, das ganze in 2 Querys zu packen.
    Weil du hast zwar n Produkte in jeder Bestellung, aber die Details zu jeder Bestellung bleiben ja vermutlich identisch.

    Insofern die IDs in den Tabellen wirklich gleich heißen, kannst du auch USING() nehmen:
    Code:
    JOIN (product USING(product_id))
    
    Ein bissl weniger Schreibarbeit und ist imho übersichtlicher.
     
  3. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.