我有以下 SQL:
SELECT o.order_id, ol.product_manufacturer
FROM orders o
INNER JOIN order_lines ol
ON o.order_id = ol.order_id
WHERE o.deadline_time > UNIX_TIMESTAMP()
我还有这些表:
orders:
order_id, somefield, somefield, somefield...
order_lines:
id, order_id, product_manufacturer, somefield, somefield...
我想获取截止日期未过的所有订单并按 product_manufacturer 对它们进行分组,但如果一个订单有三个订单行,它们都具有 product_manufacturer id,那么它应该只返回 id 的。如果它有两个具有不同 product_manufacturer id 的订单行,那么它应该返回 id 两次,依此类推。
我正在使用 PHP,我希望得到这样的数组:
$group[manufacturer_id] = array(order_id, order_id, order_id);
编辑:实际上,如果一个订单中有多个制造商 ID,我希望它返回 manufacturer_id = 999。很抱歉弄错了。
EDIT2:我正在列出所有订单,但我必须按制造商列出它们。像这样:
SONY
Order 1
Order 2
Order 16
Order 99
PROSONIC
Order 3
Order 88
Order 98
稍后应该可以搜索,所以我将不得不做类似 WHERE ol.product_name LIKE '%$query' 的东西,但我会在它工作后添加它。
最佳答案
SELECT o.order_id,group_concat(distinct(ol.product_manufacturer )) as manufacturer
FROM orders o
INNER JOIN order_lines ol
ON o.order_id = ol.order_id
WHERE o.deadline_time > UNIX_TIMESTAMP()
group by o.order_id
这将返回
Order_id manufacturer
1 sony, panasonic
2 sony
SELECT o.order_id,
CASE WHEN count(distinct(ol.product_manufacturer )) >1
THEN '999' ELSE product_manufacturer END as manufacturerid
FROM orders o
INNER JOIN order_lines ol
ON o.order_id = ol.order_id
WHERE o.deadline_time > UNIX_TIMESTAMP()
group by o.order_id
这将返回
Order_id manufacturerid
1 999
2 sony
关于php - 从多个记录中获取所有不同的值但不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564124/