Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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 Codeigniter活动记录-计数有限制的找到的行总数(MySQL)_Php_Mysql_Codeigniter_Limit_Codeigniter 2 - Fatal编程技术网

Php Codeigniter活动记录-计数有限制的找到的行总数(MySQL)

Php Codeigniter活动记录-计数有限制的找到的行总数(MySQL),php,mysql,codeigniter,limit,codeigniter-2,Php,Mysql,Codeigniter,Limit,Codeigniter 2,我在Codeigniter模型中使用了一个复杂的SQL查询,并应用了一个限制。我想计算一下,如果没有应用限制和偏移量,会找到多少行 我想将计数连同结果数组一起返回给我的控制器-我该怎么做?如果这是正确的解决方案,我应该将SQL\u CALC\u FOUND\u行放在哪里 下面是一个查询(我最初不是自己构建的): 非常感谢您的帮助 我能想到的一种方法是在调用函数时使用变量$count,它将如下所示: 函数你的函数($count=FALSE){ 这样,您可以两次调用函数-一次用于计数,另一次用于限额

我在Codeigniter模型中使用了一个复杂的SQL查询,并应用了一个限制。我想计算一下,如果没有应用限制和偏移量,会找到多少行

我想将计数连同结果数组一起返回给我的控制器-我该怎么做?如果这是正确的解决方案,我应该将SQL\u CALC\u FOUND\u行放在哪里

下面是一个查询(我最初不是自己构建的):


非常感谢您的帮助

我能想到的一种方法是在调用函数时使用变量$count,它将如下所示:

函数你的函数($count=FALSE){

这样,您可以两次调用函数-一次用于计数,另一次用于限额查询:

$count = count($this->your_function(TRUE));
$data['query] = $this->your_function();

我以前对分页有完全相同的要求,并且我能够使用CodeIgniter活动记录使其工作

首先,将选项
SQL\u CALC\u FOUND\u ROWS
设置为select语句中的伪列,并将escape query设置为false:

$this->db->select('SQL_CALC_FOUND_ROWS null as rows, other columns ...',FALSE);
然后,在使用“限制”和“偏移”执行查询后,将结果集分配给返回数组:

$data = $this->db->get();
$return['results'] = $data->result();
// Do something with the results
最后,运行第二个查询以获取找到的行,并将其分配给返回数组

$return['rows'] = $this->db->query('SELECT FOUND_ROWS() count;')->row()->count;
并返回结果和行计数数组

return $return;

谢谢,但我尽量避免调用函数两次-这将涉及运行两次查询,这将是低效的我设法找到了与您类似的问题和解决方案:我见过一个,但难以使用SQL\u CALC\u FOUND\u行,可能是由于我使用的查询的复杂性,嗯,也许您应该使用经典查询,而不是CI active record。我想这样您可以设法插入SQL\u CALC\u FOUND\u行。我将经典查询转换为active record,因为我需要停止CI对查询应用反勾号,尽管它是作为经典查询编写的,但您可以使用active record中的可选参数来阻止它。您是我的英雄今天:)如果您正在使用自定义结果对象(
custom\u result\u object()
),select语句可能会向行对象/数组添加另一个属性。在这种情况下,您可以执行以下操作:
$sql=$this->db->get\u compiled\u select();$sql=substr\u replace($sql,'sql\u CALC\u FOUND\u ROWS',6,0)$data=$this->db->query($sql);
其余部分与@Wolf建议的相同。可能是这样//忽略他所说的这个注释
$return['rows'] = $this->db->query('SELECT FOUND_ROWS() count;')->row()->count;
return $return;