2012-11-25 2 views
1

Я пытаюсь получить массив значений из одной таблицы mysql, затем выполнить поиск по другой таблице для этих значений и извлечь данные из них. Представьте две таблицы: таблицу заказов (id, product_id) и таблицу продуктов (id, price). Я в основном пытаюсь использовать массив, полный order.id, чтобы суммировать products.price из этих идентификаторов в массиве.MySQL, PHP и несколько таблиц

Я понял, как получить массив полный orders.id в PHP с помощью

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

Таким образом, вопрос, теперь у меня есть этот массив, как использовать его для поиска другой таблицы для любого id в массиве и затем извлекать данные из этой строки.

+0

Вам нужно сделать JOIN на телефоне, поэтому немного сложно дать полный ответ, хотя кто-то может или вы можете сделать некоторые исследования – Steve

ответ

2

Вы можете использовать $results_array, чтобы получить идентификатор продукта, а затем выполнить другой запрос, например, тот, который вы использовали, используя $results_array['product_id'].

Однако это очень неэффективно. Надлежащим образом должна сделать SQL присоединиться или простой совместный запрос следующим образом:

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

Полученные строки будут иметь всю необходимую информацию из обеих таблиц.

UPDATE: Больше информации

При использовании пункт Where присоединиться неявно, это эффективно внутреннее соединение. I.e возвращает строки, если в обеих таблицах есть хотя бы одно совпадение. Левое соединение, с другой стороны, возвращает все строки из первой таблицы, даже если во второй таблице нет совпадающих строк (в этом случае вы получите соответствующие поля, соответствующие второй таблице null).

Так, а не производительность (которая больше определяется индексами, которые у вас есть на ваших полях, хотя тип соединения может иметь какое-то влияние), то, что вы выбираете, зависит от того, какие результаты вы хотите получить. Возможно, вы захотите посмотреть here (убедитесь, что вы прочитали 5 последовательных страниц о соединениях), чтобы получить полное понимание.

+0

Является ли это более-менее эффективным, чем левое соединение на products.id = orders .Код товара? – jcolicchio

+0

Присоединение, которое вы выбираете, влияет на результаты, которые вы получаете скорее на производительность, я обновил свой ответ, который немного больше информации. – jbx

Смежные вопросы