小编Pon*_*ade的帖子

如何有效地使用SQL在半小时间隔内检索数据?

问题 - 有效地检索半小时间隔的小计总和

我正在使用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)

期望的结果

像这样的数组:

  • 半小时1 :::(7:00到7:30)=>小计总和为11
  • 半小时2 :::(7:30到8:00)=>小计总和为3
  • 半小时3 :::(8:00到8:30)=>小计总和为5
  • 半小时4 :::(8:30到9:00)=>小计总和为8

现行方法

当前的方式使用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)

php mysql sql performance

6
推荐指数
1
解决办法
1万
查看次数

PHP在具有相同键值的二维数组中求和值

问题:找到每个'id'的'subtotal'中值的总和,并将每个id的相应总和存储在一个数组(或变量)中.

我现在的草率解决方案是运行一个带有多个if语句的foreach来计算出现次数.这对于像5个ID这样的东西是足够的,但是我必须在38个以上迭代它.如果可能的话,我想将结果按顺序存储在数组中.

我怎样才能提高效率?任何和所有帮助将不胜感激.(看到我最后的草率解决方案,以获得良好的笑声)

期望的结果:

  • 所有ID 1的总和= 10
  • 所有ID 2的总和= 18
  • 所有ID 3 = 14的总和
  • 所有ID 4 = 4的总和
  • 所有ID 5 = 3的总和

操作的数组代码

    $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)

php arrays sum multidimensional-array

2
推荐指数
1
解决办法
6099
查看次数

标签 统计

php ×2

arrays ×1

multidimensional-array ×1

mysql ×1

performance ×1

sql ×1

sum ×1