我有3个表:orders,order_items和order_addons。
我必须在一行中获取订单的所有order_items和order_addons。
1 - 如果订单包含1个产品和2个插件,则结果应为:
Order no produt name addons
123 mobile cardreader,screen gard
2 - 如果订单有2个产品和1个插件,则结果应为:
Order no produt name addons
123 mobile,camera cardreader
3 - 如果订单有2个产品,每个产品有1个插件,则结果应为:
Order no produt name addons
123 mobile,camera cardreader,datacable
4 - 如果订单有2个产品,每个产品有2个插件,则结果应为:
Order no produt name addons
123 mobile,camera cardreader,datacable,cardreader,datacable
实际上,我的查询是:
SELECT
orders.invoice_id AS 'Order Number',
GROUP_CONCAT(IFNULL(order_items.product_name, '')) AS 'Product Name',
GROUP_CONCAT(IFNULL(order_addons.addon_name, '')) AS 'Addon Name'
FROM orders
LEFT JOIN order_items ON order_items.cart_id = orders.cart_id
LEFT JOIN order_addons ON order_addons.orderitem_id = order_items.orderitem_id
WHERE orders.invoice_id IN ('89161')
GROUP BY orders.order_id
ORDER BY orders.order_id DESC
它检索重复的名称,如第1点所示。
Order no produt name addons
123 mobile,mobile cardreader,screen gard
对于第2点:
Order no produt name addons
123 mobile,camera cardreader,cardreader
如果我使用此查询:
SELECT
orders.invoice_id AS 'Order Number',
GROUP_CONCAT(DISTINCT IFNULL(order_items.product_name, '')) AS 'Product Name',
GROUP_CONCAT(DISTINCT IFNULL(order_addons.addon_name, '')) AS 'Addon Name'
FROM orders
LEFT JOIN order_items ON order_items.cart_id = orders.cart_id
LEFT JOIN order_addons ON order_addons.orderitem_id = order_items.orderitem_id
WHERE orders.invoice_id IN ('89161')
GROUP BY orders.order_id
ORDER BY orders.order_id DESC
它会删除重复的名称,如果按顺序存在相同的名称,我也不希望这样。 就像一个订单一个产品和两个同名的插件。