Как соединить несколько строк в таблице в одну

Есть sql запрос

select 
   oi.order_item_name , oi.order_item_id, oim.meta_key ,oim.meta_value
from 
   idlf.wp_woocommerce_order_items as oi 
right join 
   idlf.wp_woocommerce_order_itemmeta as oim 
on 
   oim.order_item_id = oi.order_item_id 
where 
   oi.order_id = 8133 AND meta_key IN ('_qty', '_line_total','_product_id')

Вывод у запроса такой введите сюда описание изображения

Как сделать так чтобы _product_id, _qty и _line_total были в одной строке к одному и тому же товару?


Ответы (1 шт):

Автор решения: Fat-Zer

Придётся делать 3 JOIN'а (или подзапроса, сути не меняет), ничего гламурней для EAV в sql не придумать:

SELECT oi.order_item_name , oi.order_item_id,
 oim_qty.meta_value, oim_line_total.meta_value, oim_product_id.meta_value
FROM idlf.wp_woocommerce_order_items AS oi
 LEFT JOIN idlf.wp_woocommerce_order_itemmeta AS oim_qty 
   ON  oi.order_item_id = oim_qty.order_item_id
   AND oim_qty.meta_key = `_qty`
 LEFT JOIN idlf.wp_woocommerce_order_itemmeta AS oim_total 
   ON  oi.order_item_id = oim_total.order_item_id
   AND oim_total.meta_key = `_line_total`
 LEFT JOIN idlf.wp_woocommerce_order_itemmeta AS oim_product_id 
   ON  oi.order_item_id = oim_product_id.order_item_id 
   AND oim_product_id.meta_key = `_product_id`
WHERE oi.order_id = 8133

Также, в вопросе, наверно, имелся в виду LEFT JOIN. RIGHT JOIN мало подходит здесь по смыслу...

→ Ссылка