Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 在相互交织的日期范围内实现多个Mysql和的快捷方式_Php_Mysql_Sql - Fatal编程技术网

Php 在相互交织的日期范围内实现多个Mysql和的快捷方式

Php 在相互交织的日期范围内实现多个Mysql和的快捷方式,php,mysql,sql,Php,Mysql,Sql,当我的站点上的用户登录时,会对统计数据执行多个查询 SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_month AND $end_month SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_last_month AND $end_last_month SELECT SUM(earnings) FROM stats WHERE date BETWEEN $star

当我的站点上的用户登录时,会对统计数据执行多个查询

SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_month AND $end_month
SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_last_month AND $end_last_month
SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_year AND NOW()
//etc...
我觉得我是在“欺骗”Mysql引擎,要求它在单独的查询中对所有这些进行求和。例如,当它计算年收入时,它也在计算该年内的月收入……但不管怎样,我再次查询它


有没有更好的方法来获得多个相互交织的日期范围的总和

实际上,您可以使用
案例
来计算
收入

SELECT  SUM(CASE WHEN date BETWEEN $start_month AND $end_month THEN earnings ELSE 0 END),
        SUM(CASE WHEN date BETWEEN $start_last_month AND $end_last_month THEN earnings ELSE 0 END),
        SUM(CASE WHEN date BETWEEN $start_year AND NOW() THEN earnings ELSE 0 END)
FROM    stats

你能解释一下为什么这比单独的查询更有效吗?谢谢:)PHP和MySQL之间的往返更少;每次往返都要付出代价。这是SQL标准还是特定于mySQL?如果从应用程序调用,它只查询数据库一次,因为连接数据库需要大量资源。@fredrik大多数RDBMS都支持这一点。