Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 查询100k记录表,超出执行时间_Php_Mysql_Arrays - Fatal编程技术网

Php 查询100k记录表,超出执行时间

Php 查询100k记录表,超出执行时间,php,mysql,arrays,Php,Mysql,Arrays,每个成员都有多条记录存储在数据库中。我需要对每个用户的一列求和,并从另一列获得最高/最低值。该表有超过100k条记录,一个用户在该表中可能有超过2k条记录 我试过这个: $query = $mysqli->query("SELECT DISTINCT `id` FROM `table`"); if($query){ $IDs = new SplFixedArray($query->num_rows); $IDs = $query->fetch_all(); uns

每个成员都有多条记录存储在数据库中。我需要对每个用户的一列求和,并从另一列获得最高/最低值。该表有超过100k条记录,一个用户在该表中可能有超过2k条记录

我试过这个:

$query = $mysqli->query("SELECT DISTINCT `id` FROM `table`");

if($query){
  $IDs = new SplFixedArray($query->num_rows);
  $IDs = $query->fetch_all();
  unset($query, $row);


  set_time_limit(300);
  foreach ($IDs as $key => $value) {
    $query = $mysqli->query("SELECT SUM(price), dtime FROM `table` WHERE `id` = '".$value[0]."' ORDER BY dtime DESC");
    if($query){
      $row = $query->fetch_assoc();
      print_r($row);
    }
  }

但将时间限制设定为300真的是正确的做法吗?我还尝试了一个预先准备好的语句,只在循环中分配ID,以及其他一些事情。所有这些都不能像我想象的那样正常工作。

100k条记录确实没有那么多,这个查询应该没有理由花费超过5分钟的时间

与其获得一个不同的ID列表并遍历它们,为每个ID查询这些值,不如一次完成所有工作,然后遍历结果以完成需要的工作

select 
  `id`, 
  sum(`price`) as `sum_price`, 
  min(`dtime`) as `min_dtime`, 
  max(`dtime`) as `max_dtime` 
from 
  `table` 
group by 
  `id`
(这是假设您需要获取的最小值和最大值的“其他字段”是
dtime


虽然我在PHP方面不是很强,但从SQL的角度来看,这样做要快得多。

你的问题没有任何意义。请提供数据库表模式、示例数据和所需结果的上下文。我认为Jeff是对的。100000个查询需要很长时间,而MySQL将很快完成。