【问题标题】:MySQL PHP select rows count in date rangeMySQL PHP选择日期范围内的行数
【发布时间】:2019-03-16 17:50:23
【问题描述】:

我有一个名为 TABLE1 的用于产品订购的 MySQL 表。

日期表示购买日期

该表还有其他当前没有影响的列。

PRODUCT_ID | DATE      | other columns
    3      |2018-02-01 | other values
    3      |2018-02-03 | other values
    3      |2018-02-07 | other values
    3      |2018-02-07 | other values
    3      |2018-03-02 | other values

我知道产品3第一次下单的时间是2018-02-01

SELECT DATE FROM TABLE1 WHERE PRODUCT_ID = '3' ORDER BY DATE ASC LIMIT 1

如何在 2018 年 2 月 1 日和 2019 年 3 月 16 日(今天)范围内选择每天的产品订购数量,以便获得这样的表格:

DATE       | ORDERS_PER_DAY
2018-02-01 | 1
2018-02-02 | 0
2018-02-03 | 1
...
2018-02-07 | 2
...
2018-03-02 | 1
...
2018-03-15 | 0
2018-03-16 | 0

感谢您的帮助!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以简单地使用GROUP BY 子句来做到这一点。

    SELECT `DATE`, COUNT(`PRODUCT_ID`) AS ORDERS_PER_DAY
    FROM TABLE1
    WHERE `DATE` BETWEEN '2018-02-01' AND CURDATE() 
    GROUP BY `DATE`
    

    此查询将过滤您所需日期范围内的记录,然后按有数据的每一天对其进行分组。

    【讨论】:

    • 谢谢。我怎么能得到第 x 天将售出 0 件产品的响应?日期 | ORDERS_PER_DAY 2018-02-04 | 0
    • 您可以在 PHP 代码中编写一个循环并检查 ORDERS_PER_DAY == 0 以查找订单计数为 0 的日期。
    • @userxöa 我已经修改了查询。请使用它。
    【解决方案2】:

    我的语法可能不完全正确,但您可以使用GROUP BY 子句尝试类似的方法吗?

    SELECT DATE, COUNT(*) AS ORDERS_PER_DAY
    FROM TABLE1
    GROUP BY DATE, PRODUCT_ID
    HAVING PRODUCT_ID = '3'
    

    您可以在此处阅读更多信息:https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html

    【讨论】:

    • 为什么不WHERE product_id = 3
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2019-04-28
    相关资源
    最近更新 更多