Php 执行同一个SELECT查询的更好方法,而不是在while循环中执行数千次?
对于while循环中生成的不同时间戳值,我有一个非常低效的查询运行数百次/数千次。如何从while循环中获取$start\u date和$start\u date\u interval的所有不同值 我曾经尝试过使用IN子句和使用OR的多个Where进行子查询,但本质上它与单独运行查询是一样的。这太慢了,太慢了,因为表包含一个非常大的数据集。我确信有一个更简单的方法,但不确定是什么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 ($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中相应地处理结果?感谢您的回答,您能给我一个简单的例子吗?