我有一个复杂的SELECT
,有几个耗时的计算字段。我只想要前100行,但是,我还需要找到总行数。这意味着使用LIMIT
执行一次查询,不执行一次查询。
我希望能够与CodeIgniter的QueryBuilder同时构建两个SELECT
,并消除第二个查询中耗时的计算字段。
我想知道是否有一个很好的方法可以用QB做到这一点,或者我应该在没有QB的情况下构建SELECT
。
更新:显然我让人感到困惑。我需要做这样的事情:
要显示记录:
SELECT id, [ several really time intensive calculated fields ]
FROM table
WHERE [some complicated criteria]
LIMIT 100;
要获取总记录,我想重新使用构建的查询或同时构建第二个,但没有限制,只有id字段:
SELECT id
FROM table
WHERE [some complicated criteria];
另一种选择;我已经了解到,如果我将时间密集的计算字段放在子SELECT中,Postgres将不会执行它,直到实际检索到该行。
现在我手动构建两个查询,但我想用正确的QueryBuilder方式。
答案 0 :(得分:0)
无法在codeigniter中的一个语句中运行多个查询。但你可以这样做
$query1 = $this->db->query('SELECT * FROM table_name LIMIT 10');
$query2 = $this->db->query('SELECT * FROM table_name');
但我所做的是根据
这样的参数制作方法和调用public function get_rows($table, $num_rows = FALSE){
$this->db->select('*');
$this->db->from($table);
if($num_rows === FALSE){
$this->db->limit(10);
}
$query = $this->db->get();
if($num_rows){
return $query->num_rows();
}
return $query->result_array();
}
现在您可以将其称为您的要求
//call for only count rows (without limit)
$this->model_name->get_rows('table_name', TRUE);
//call with limit for result rows
$this->model_name->get_rows('table_name');
答案 1 :(得分:0)
有了计数你可以用查询构建器做到这一点我认为 看看这段代码,你可能想要那样的东西
pw-20