Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 执行同一个SELECT查询的更好方法,而不是在while循环中执行数千次?_Php_Mysql_Database_Performance_Query Optimization - Fatal编程技术网

Php 执行同一个SELECT查询的更好方法,而不是在while循环中执行数千次?

Php 执行同一个SELECT查询的更好方法,而不是在while循环中执行数千次?,php,mysql,database,performance,query-optimization,Php,Mysql,Database,Performance,Query Optimization,对于while循环中生成的不同时间戳值,我有一个非常低效的查询运行数百次/数千次。如何从while循环中获取$start\u date和$start\u date\u interval的所有不同值 我曾经尝试过使用IN子句和使用OR的多个Where进行子查询,但本质上它与单独运行查询是一样的。这太慢了,太慢了,因为表包含一个非常大的数据集。我确信有一个更简单的方法,但不确定是什么 while ($start_date <= $end_date) { $date_a

对于while循环中生成的不同时间戳值,我有一个非常低效的查询运行数百次/数千次。如何从while循环中获取$start\u date和$start\u date\u interval的所有不同值

我曾经尝试过使用IN子句和使用OR的多个Where进行子查询,但本质上它与单独运行查询是一样的。这太慢了,太慢了,因为表包含一个非常大的数据集。我确信有一个更简单的方法,但不确定是什么

while ($start_date <= $end_date) {

            $date_array[] = date('d/m/Y H:i:s', strtotime($start_date));

            $start_date_interval = date('Y-m-d H:i:s', strtotime($start_date) + $interval);
            echo date('d/m/Y H:i:s', strtotime($start_date)) . ' ------> ';


            $query = "SELECT COUNT(id) AS totalcalls FROM calls "
                    . "WHERE (use = 1 AND ((start_time >= '$start_date' AND start_time < '$start_date_interval') "
                    . "OR (start_time > '$start_date_past' AND start_time < '$start_date_interval' "
                    . "AND end_time >= '$start_date')));";


            $result = mysqli_query($connection, $query);

            $row = mysqli_fetch_array($result, MYSQLI_ASSOC);

            $data[] = $row['call_count'];
            echo $row["call_count"] . ' active calls.<br>';

            $start_date = date('Y-m-d H:i:s', strtotime($start_date) + $interval);
        }

while($start_date如果您有大量不同的值要测试,一个有用的方法是让一个临时表加载所有不同的值。然后加入这个临时表以选择您需要的所有行


如果您可以从数据库中加载不同的值,它应该会非常快。如果您必须上载包含1000个值的客户端数据集,则必须快速执行此操作。如果您不喜欢这些值,请搜索其他值。

如果您的范围是固定的,则可以按范围分组,创建一个查询,返回记录的数量对于每个范围的ds,也许本文将帮助您:


为什么不一次选择所有数据,按
开始时间排序,然后在PHP中相应地处理结果?感谢您的回答,您能给我一个简单的例子吗?