2011-04-14 8 views
1

Ok, je sais que c'est stupide mais je suis coincé et j'ai besoin d'un coup de pied dans la tête. J'ai 3 tables (commandes, OrderItems, produits) et j'utilise 2 à gauche jointures externes dans une requête pour afficher l'historique des commandes dans la section clients:Jointures multiples MySQL - Comment afficher les données? (en utilisant PHP)

SELECT * FROM orderitems oi, orders o 
LEFT OUTER JOIN product p ON p.dbarcode = oi.orderitems_item 
WHERE o.order_code = oi.orderitems_ordercode 
    AND oi.orderitems_ordercode = '".$_GET['ordercode']."'` 

Je peux afficher une ligne pour chaque produit la table order_items mais je n'arrive pas à afficher (echo) le montant total qui est détenu dans le champ orders.order_amount, je présume que cela a à voir avec le fait que le champ a plusieurs instances ou quoi que ce soit. Comment afficher des données à la suite de plusieurs tables jointes?

Modifier pour Quassnoi:

boucle de I par l'intermédiaire des résultats et de créer une ligne de tableau pour chacun d'eux et, après la boucle, je veux afficher le total général:

<? do { ?> 
    <tr> 
    <td><? echo $row_OrderItems['dbarcode']; ?></td> 
    <td><? echo $row_OrderItems['name']; ?></td> 
    <td><? echo $row_OrderItems['orderitems_quantity']; ?></td> 
    <td><? echo $row_OrderItems['price']; ?></td> 
    </tr> 
    <? } while ($row_OrderItems = mysql_fetch_assoc($OrderItems)); ?> 

    <tr> 
    <td colspan="5">Total order amount (incl. shipping and handling): &euro; <? echo $row_OrderItems['order_amounteuro']; ?></td> 
    </tr> 
+0

L'ajout de 'o.order_amount AS order_amount' dans l'aide SELECT? – Marco

+0

vous devez stocker le total avant la fin de la boucle. – bumperbox

+0

Oui, j'ai réalisé que la raison pour laquelle je ne peux pas afficher le total est parce qu'il est en dehors de la boucle, mais je dois l'afficher là et pas à l'intérieur de la région répétée. Des idées? – bikey77

Répondre

1
<? do { ?> 
    <tr> 
    <td><? echo $row_OrderItems['dbarcode']; ?></td> 
    <td><? echo $row_OrderItems['name']; ?></td> 
    <td><? echo $row_OrderItems['orderitems_quantity']; ?></td> 
    <td><? echo $row_OrderItems['price']; ?></td> 
    </tr> 
    <? 
$total = $row_OrderItems['order_amounteuro']; // store the total, before you loop past the last row 
} while ($row_OrderItems = mysql_fetch_assoc($OrderItems)); ?> 

    <tr> 
    <td colspan="5">Total order amount (incl. shipping and handling): &euro; <? echo $total; ?></td> 
    </tr> 
+0

Oui, j'ai, j'utilise print_r et je peux voir toutes les données correctement. – bikey77

+0

@ bikey77 besoin de voir le code php pour aider plus loin alors – bumperbox

3

o.order_amount seront répétées dans chaque rangée, prenez le premier.

Et, bien sûr, ne jamais utiliser ceci:

oi.orderitems_ordercode = '".$_GET['ordercode']."'` 

sans mysql_real_escape_string.

+0

Oui, je désinfecte les entrées, je viens d'utiliser le ci-dessus comme un exemple! J'ai aimé la bande dessinée bien que! :) – bikey77

+0

Oublié de demander si, comment puis-je afficher seulement la première instance? Si je fais simplement écho sur le champ echo $ row_orderinfo ('order_amout') il ne montre rien bien que les données aient été récupérées (je peux le voir avec print_r) – bikey77

+0

@ bikey77: s'il vous plaît poster un échantillon de votre code (comme une mise à jour de votre poste originale) – Quassnoi

0

Juste un FYI, cette partie de votre déclaration:

SELECT * FROM orderitems oi, orders o 
LEFT OUTER JOIN product p ON p.dbarcode = oi.orderitems_item 

est tout de orderitems aller chercher, et ordersproducts. Préfixez le * avec la table dont vous voulez tous les champs, ou réécrivez-le pour récupérer des champs spécifiques.

+0

Je reçois votre point mais ne fait pas la condition "AND oi.orderitems_ordercode = '". $ _ GET [' ordercode ']. "'" Faire le travail et juste tirer les enregistrements spécifiques de la base de données? – bikey77

Questions connexes