2012-11-25 6 views
1

J'essaie d'obtenir un tableau de valeurs d'une table mysql puis de chercher dans une autre table ces valeurs et d'en extraire des données. Imaginez deux tables: une table de commandes (id, product_id) et une table de produits (id, price). Je suis en train d'essayer d'utiliser un tableau plein de commandes.id pour additionner les produits.prix de ces ids dans le tableau.MySQL, PHP et plusieurs tables

J'ai compris comment obtenir la gamme complète de orders.id en PHP utilisant

$results = mysql_query("SELECT id FROM orders WHERE some_value =" . $passed_value . ""); 
    while ($row = mysql_fetch_row($results)) 
     { 
     $results_array[] = $row[0]; 
     } 

La question est donc, maintenant que j'ai ce tableau, comment puis-je l'utiliser pour rechercher une autre table pour tout identifiant dans le tableau, puis extraire les données de cette ligne.

+0

Vous devez faire un JOIN, sur un téléphone, donc un peu difficile à donner une réponse complète, bien que quelqu'un va ou vous pouvez faire des recherches – Steve

Répondre

2

Vous pouvez utiliser le $results_array pour obtenir l'ID du produit, puis effectuer une autre requête comme celle que vous avez exécutée en utilisant $results_array['product_id'].

Cependant, ceci est très inefficace. La bonne façon est de faire une SQL ou se joindre à une simple requête conjointe comme ceci:

SELECT orders.id, orders.product_id, products.price 
FROM orders, products 
WHERE orders.id = '" . $your_order_id . "' and products.id = orders.product_id 

Les lignes résultantes auront toutes les informations dont vous avez besoin des deux tables.

MISE À JOUR: Plus d'informations

Lorsque vous utilisez la clause Where de se joindre implicitement, il est effectivement une jointure interne. Par exemple, il renvoie des lignes lorsqu'il y a au moins une correspondance dans les deux tables. Une jointure gauche retourne d'autre part toutes les lignes de la première table, même s'il n'y a pas de lignes correspondantes dans la deuxième table (auquel cas vous obtenez les champs respectifs correspondant à la deuxième table null). Donc, plutôt que les performances (qui sont plus déterminées par les index que vous avez sur vos champs, bien que le type de jointure puisse avoir un impact), ce que vous choisissez dépend des résultats que vous voulez obtenir. Vous voudrez peut-être regarder here (assurez-vous de lire les 5 pages consécutives sur les jointures) pour avoir une compréhension complète.

+0

Est-ce plus ou moins efficace que de faire une jointure gauche sur products.id = commandes .product_id? – jcolicchio

+0

La jointure que vous choisissez affecte les résultats que vous obtenez plutôt la performance, j'ai mis à jour ma réponse qui plus d'infos. – jbx