Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
Mysql PHP返回奇怪的行计数_Mysql_Codeigniter_Mysql Num Rows - Fatal编程技术网

Mysql PHP返回奇怪的行计数

Mysql PHP返回奇怪的行计数,mysql,codeigniter,mysql-num-rows,Mysql,Codeigniter,Mysql Num Rows,我正在处理一个非常大的数据集(精确地说是786432行) 因此,为了防止内存限制,我想在50000行的数据集中循环,为了测试这一点,我想我会尝试: function test(){ $start = 0; $end = 50000; $q = $this->db->select('uuid')->from('userRegionLink')->limit($end, $start)->get(); $i = 0; while

我正在处理一个非常大的数据集(精确地说是786432行)

因此,为了防止内存限制,我想在50000行的数据集中循环,为了测试这一点,我想我会尝试:

function test(){
    $start = 0;
    $end = 50000;

    $q = $this->db->select('uuid')->from('userRegionLink')->limit($end, $start)->get();
    $i = 0;
    while($q->num_rows() != 0){
        echo 'Round: '.++$i.'<br />';
        echo 'Rows: '.$q->num_rows().'<br />';
        echo 'Start: '.$start.'<br />';
        echo 'End: '.$end.'<hr />';

        $start = $end;
        $end = $end+50000;
        $q = $this->db->select('uuid')->from('userRegionLink')->limit($end, $start)->get();
    }
}
功能测试(){
$start=0;
$end=50000;
$q=$this->db->select('uuid')->from('userRegionLink')->limit($end,$start)->get();
$i=0;
而($q->num_rows()!=0){
回显“圆形:”.+$i.
; 回显“行:”。$q->num_Rows()。
; 回显“开始:”.$Start.
; 回音“End:”.$End.
; $start=$end; $end=$end+50000; $q=$this->db->select('uuid')->from('userRegionLink')->limit($end,$start)->get(); } }
但我的结果非常奇怪:看看第9轮和以下

这是什么原因造成的

轮:1行:50000开始: 0
结束:50000
轮:2行: 100000开始:50000结束: 100000次
轮:3行
行: 150000开始:100000结束: 150000
轮:4行: 200000开始:150000结束: 200000
轮:5行
行: 250000开始:200000结束: 250000次
轮:6行
行: 300000开始:250000结束: 300000次
轮:7行
行: 350000开始:300000结束: 350000
轮:8行: 400000开始:350000结束: 400000
轮:9行
行: 386432开始:400000结束: 450000
轮:10行
行: 336432开始:450000结束: 500000次
轮:11行
行: 286432开始:500000结束: 550000<小时>圆形:12行 236432开始:550000结束: 600000
轮:13行: 186432开始:600000结束: 650000
轮:14行: 136432开始:650000结束: 700000
轮:15行: 86432开始:700000结束: 750000
轮:16行: 36432开始:750000结束: 800000人<小时>


看起来$end不是全局偏移量,而是要获取的记录数(从$start的偏移量)。尝试将$end always设置为50000,并仅更改$start。

垃圾收集?你真的想让PHP在内存中保留800k行吗?事实上,这是一个问题,整个事情很复杂,除了最后一个循环,每个循环的行数应该是50000行,这里发生了什么?每次迭代行数都会增加50k,跟踪
$q
使用的数组中的总行数。在某个时候,PHP决定删除一些数组值。我感兴趣的是,它是从“前端”(即FIFO)顺序删除它们,还是以不太确定的方式执行。我打赌后者:):D逻辑错误在我这方面,出于某种原因,我决定我还需要增加限制以及偏移量:P