Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从月初开始计算凭证总价值_Php_Mysql_Sql - Fatal编程技术网

Php 从月初开始计算凭证总价值

Php 从月初开始计算凭证总价值,php,mysql,sql,Php,Mysql,Sql,我有一个名为“凭单”的表,其中包含名为“凭单价值”和“兑换金额”的字段。赎回的_at是Unix时间戳格式(由PHP time()函数生成) 因此,我需要得到自本月初以来凭证价值的总和 这方面的SQL代码是什么 谢谢。类似于: SELECT SUM(voucher_value) FROM vouchers WHERE MONTH(FROM_UNIXTIME(redeemed_at)) = MONTH(CURDATE()) AND YEAR(FROM_UNIXTIME(redeemed_

我有一个名为“凭单”的表,其中包含名为“凭单价值”和“兑换金额”的字段。赎回的_at是Unix时间戳格式(由PHP time()函数生成)

因此,我需要得到自本月初以来凭证价值的总和

这方面的SQL代码是什么

谢谢。

类似于:

SELECT SUM(voucher_value)
  FROM vouchers
 WHERE MONTH(FROM_UNIXTIME(redeemed_at)) = MONTH(CURDATE())
   AND YEAR(FROM_UNIXTIME(redeemed_at)) = YEAR(CURDATE())

也许

我相信您会在for date和time函数中找到所需的全部内容

编辑

马克的回答非常好。如果您正在追求性能的最后下降,那么您的列类型是(注意区域和范围限制),并且您有一个索引,然后:

SELECT SUM(voucher_value)
FROM vouchers
WHERE redeemed_at BETWEEN
      UNIX_TIMESTAMP(DATE_ADD(LAST_DAY(DATE_SUB(NOW(), interval 1 month)), interval 1 day))
      AND
      UNIX_TIMESTAMP(DATE_SUB(DATE_ADD(LAST_DAY(NOW()), interval 1 day), interval 1 second))
应该快得多(因为它不必在处对赎回的_应用任何转换)。表达式很大/很复杂(而且没有经过彻底测试,当然可以编写更简单/更短的表达式),但重要的是它们是常量,并且每个查询只计算一次。替换
NOW()
使用参数可获得两件事

  • 概括(当然)
  • 能够缓存结果(mysql不会缓存任何涉及
    NOW()
    的查询)

但可能会过滤掉不同年份的数据?而且,您不应该先从UNIXTIME(赎回)开始吗?