如何使用CodeIgniter QueryBuilder一次构建多个查询?

时间:2016-11-12 18:11:34

标签: codeigniter

我有一个复杂的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方式。

2 个答案:

答案 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