php - 从多个记录中获取所有不同的值但不重复

标签 php mysql sql database

我有以下 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/

相关文章:

sql - Oracle 查询按年份汇总数量 - 仅过去 3 年

php - MySQL:在表更新期间删除 "orphaned"行?

MySQL:我应该如何起草这个数据库?

PHP 如果不在数字 1-6 之间

python - 如何解决这种双重编码?

mysql - 如何将excel中的数据导入到MYSQL中?

java - 按顺序插入多个数组

php从mysql数据库中删除链接行

PHP PDO 查询错误

php - 将多个选择选项放入 PHP 数组