我在模型下面有以下功能..
public function get_products($category, $brand, $filter, $page, $limit) {
// output
$output = "";
// offset
$offset = $limit * ($page - 1);
// query for pagination
$this->db->select("*");
$this->db->from("products");
$this->db->where("category", $category);
if ($brand != "all") {
$this->db->where("brand", $brand);
}
// first time use
$query = $this->db->get();
$total_rows = $query->num_rows();
$this->db->limit($limit, $offset);
switch ($filter) {
case 'latest':
$this->db->order_by("released", "ASC");
break;
case 'most-viewed':
$this->db->order_by("views", "ASC");
break;
case 'price-low-to-high':
$this->db->order_by("price", "DESC");
break;
case 'price-high-to-low':
$this->db->order_by("price", "ASC");
break;
}
//second time use
$query = $this->db->get();
在这里,我想使用select
,from
和where
与2 this->db->get()
,但查询在运行第一个get()
后结束。有没有办法做到这一点?或者我要两次写活动记录?
我尝试这样做的原因是在限制分页num_rows
配置之前获取total_rows
。
答案 0 :(得分:1)
以下是如何做到这一点。
public function get_products($category, $brand, $filter, $page, $limit)
{
$output = "";
$offset = $limit * ($page - 1);
$this->getQuery($category , $brand);
$query = $this->db->get();
$total_rows = $query->num_rows();
//Call the query again
$this->getQuery($category , $brand);
/* This time limit and order will be applied to the query */
$this->db->limit($limit, $offset);
switch ($filter) {
case 'latest':
$this->db->order_by("released", "ASC");
break;
case 'most-viewed':
$this->db->order_by("views", "ASC");
break;
case 'price-low-to-high':
$this->db->order_by("price", "DESC");
break;
case 'price-high-to-low':
$this->db->order_by("price", "ASC");
break;
}
//Run query now
$query2 = $this->db->get();
}
/* This will only generate the query and will not run it */
function getQuery($category , $brand){
$this->db->select("*");
$this->db->from("products");
$this->db->where("category", $category);
if ($brand != "all") {
$this->db->where("brand", $brand);
}
}