Вернуть SQL один ко многим/один ко многим в одном массиве/объекте PHP?

tbl_customers
customer_id INT
...
...

tbl_orders
order_id
customer_id

tbl_orders_products
product_id
order_id

Предположим, я хочу получить доступ ко всем продуктам, заказанным во всех заказах одним клиентом?
Можно ли вернуть это в одном массиве PHP, используя всего 1 запрос SQL (база данных MySQL)?

Ожидаемый результат:

множество(

[customer_id] => 1,
[заказы] => массив(

[0] => массив(

[order_id] => [1],
[товары] => массив(

[0] => массив(

[название_продукта] => 'виджет')

)
)
)


person csi    schedule 02.06.2011    source источник


Ответы (1)


это возможно.

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

example result rows
user_id, username, order_id, product_id_1
user_id, username, order_id, product_id_2
user_id, username, order_id, product_id_3

затем вы можете отформатировать это в нужный массив.

person dqhendricks    schedule 02.06.2011
comment
Спасибо за ответ. Я могу сделать, как вы показываете, но возможно ли вернуть их в виде массивов в результатах, чтобы в вашем примере была вся одна строка с последним столбцом в виде массива (product_id_1, product_id_2 и т. д.)? Может вложенный запрос или подзапрос или это невозможно? - person csi; 04.06.2011