Php 从月初开始计算凭证总价值
我有一个名为“凭单”的表,其中包含名为“凭单价值”和“兑换金额”的字段。赎回的_at是Unix时间戳格式(由PHP time()函数生成) 因此,我需要得到自本月初以来凭证价值的总和 这方面的SQL代码是什么 谢谢。类似于: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_
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()