问题 - 有效地检索半小时间隔的小计总和
我正在使用MySQL,我有一个包含不同时间小计的表.我希望从早上7点到早上12点以半小时为间隔检索这些销售额的总和.我当前的解决方案(下面)工作,但需要13秒来查询大约150,000条记录.我打算将来有几百万条记录,而我目前的方法太慢了.
我怎样才能提高效率,或者如果可能的话用纯SQL替换PHP组件?另外,如果我使用Unix时间戳而不是日期和时间列,它会帮助您的解决方案更有效吗?
表名 - 收据
subtotal date time sale_id
--------------------------------------------
6 09/10/2011 07:20:33 1
5 09/10/2011 07:28:22 2
3 09/10/2011 07:40:00 3
5 09/10/2011 08:05:00 4
8 09/10/2011 08:44:00 5
...............
10 09/10/2011 18:40:00 6
5 09/10/2011 23:05:00 7
Run Code Online (Sandbox Code Playgroud)
期望的结果
像这样的数组:
现行方法
当前的方式使用for循环,从早上7点开始,增加1800秒,相当于半小时.结果,这对数据库进行了大约34次查询.
for($n = strtotime("07:00:00"), $e = strtotime("23:59:59"); $n <= $e; $n += 1800) {
$timeA = date("H:i:s", $n);
$timeB = date("H:i:s", $n+1799);
$query = $mySQL-> query ("SELECT …Run Code Online (Sandbox Code Playgroud) 问题:找到每个'id'的'subtotal'中值的总和,并将每个id的相应总和存储在一个数组(或变量)中.
我现在的草率解决方案是运行一个带有多个if语句的foreach来计算出现次数.这对于像5个ID这样的东西是足够的,但是我必须在38个以上迭代它.如果可能的话,我想将结果按顺序存储在数组中.
我怎样才能提高效率?任何和所有帮助将不胜感激.(看到我最后的草率解决方案,以获得良好的笑声)
期望的结果:
操作的数组代码
$someArray = array(
array(
'id'=> 1,
'subtotal'=> 5),
array(
'id'=> 1,
'subtotal'=> 5),
array(
'id'=> 2,
'subtotal'=> 6),
array(
'id'=> 2,
'subtotal'=> 6),
array(
'id'=> 2,
'subtotal'=> 6),
array(
'id'=> 3,
'subtotal'=> 7),
array(
'id'=> 3,
'subtotal'=> 7),
array(
'id'=> 4,
'subtotal'=> 2),
array(
'id'=> 4,
'subtotal'=> 2),
array(
'id'=> 5, …Run Code Online (Sandbox Code Playgroud)