Mysql - 使用字段值

时间:2015-07-31 09:46:22

标签: php mysql arrays mysqli

我有一个结构表

id | item | order_date | delivery_date

我有一系列日期,例如

$dates = array('2015-06-01', '2015-06-11', '2015-06-26');

我需要做的是找到订购但未在每个日期交付的商品数量。由于我的代码复杂性,不可能预先计算数组并​​分别搜索每个日期。

有一个我认为查询应该是什么样子的例子,但我开始想知道是否有可能让它以这种方式工作(没有预先约定每个日期)。

SELECT SUM(id) FROM orders WHERE order_date > IN({implode(",", $dates)}) AND delivery_date < IN ({implode(",", $dates)}) GROUP BY ???

注意:我想在一个数组中给出每个日期的GROUP BY。

1 个答案:

答案 0 :(得分:1)

使用返回数组中所有日期的子查询。然后您可以加入,并在GROUP BY

中使用其列
$subquery = implode(' UNION ', array_map(function($d) {
    return "SELECT '$d' AS date";
}, $d));
$query = "SELECT d.date, SUM(id)
          FROM orders
          JOIN ($subquery) AS d ON d.date BETWEEN order_date AND delivery_date
          GROUP BY d.date";

请注意,如果订单与多个日期匹配,则会计算每个日期。