是否可以在codeigniter中执行类似的操作:
publi function getcat($category_id)
{
$query = "(SELECT cat.id, cat.title ";
$query = $query . "FROM bf_categories cat ";
$query = $query . "WHERE cat.id=" . $category_id;
$this->db->limit(2, 4);
$records = $this->db->query($query);
return $records->result();
}
我为了演示目的简化了查询...但实际上它非常复杂,这就是为什么我决定使用query()
方法。
但是查询中没有包含limit子句......我已经通过启用控制器中的codeigniter探查器进行了验证,我可以看到查询是在没有任何限制子句的情况下运行的。
您能告诉我如何使用query()
方法完成此操作吗?
修改1
我修改了我的模型,看起来像这样:
public function get_categories_and_products($limit=5, $offset=0, $category_id=null)
{
print "<BR>the function got the following offeset: $offset and limit: $limit";
$query = "(SELECT cat.category_id, cat.title, cat.image_thumb, cat.deleted, cat.display_weight ";
$query = $query."FROM bf_categories cat ";
$query = $query."WHERE cat.parent_id=".$category_id;
$query = $query." AND cat.category_id <>".$category_id;
$query = $query.") UNION (";
$query = $query."SELECT p.product_id, p.name, p.image_thumb, p.deleted , p.display_weight";
$query = $query." FROM bf_product p ";
$query = $query."Inner join bf_product_category cp ";
$query = $query."on p.product_id=cp.product_id ";
$query = $query."Where cp.category_id=".$category_id.") ?";
$records = $this->db->query($query,array($this->db->limit(2, 4)));
return $records->result();
}
我现在已经硬编码限制值...但最终,我将使用传递给方法的值。不幸的是,这段代码仍然不起作用。 根据剖析器,这是正在执行的内容:
(SELECT cat.category_id, cat.title, cat.image_thumb, cat.deleted, cat.display_weight FROM bf_categories cat WHERE cat.parent_id=3 AND cat.category_id <>3) UNION (SELECT p.product_id, p.name, p.image_thumb, p.deleted , p.display_weight FROM bf_product p Inner join bf_product_category cp on p.product_id=cp.product_id Where cp.category_id=3)
SELECT * FROM (`bf_categories`) WHERE `category_id` = '3' LIMIT 4, 2
所以它创建了两个单独的select语句。
答案 0 :(得分:3)
这是CI中查询的样子:
$this->db->select("id, title");
$this->db->where("id", $category_id);
$this->db->from("bf_categories");
$this->db->limit($limit);
$query = $this->db->get();
if($query->num_rows() > 0)
{
foreach($query->result() as $row)
{
echo $row->title;
}
}
如果您包含完整查询,则可以更轻松地解决问题或向您展示更好,更有效的方法。
答案 1 :(得分:3)
最后,我手动完成所有事情。
public function get_categories_and_products($limit=10, $offset=0, $category_id=null)
{
$query = "(SELECT cat.category_id, cat.title, cat.image_thumb, cat.deleted, cat.display_weight ";
$query = $query."FROM bf_categories cat ";
$query = $query."WHERE cat.parent_id=".$category_id;
$query = $query." AND cat.category_id <>".$category_id;
$query = $query.") UNION (";
$query = $query."SELECT p.product_id, p.name, p.image_thumb, p.deleted , p.display_weight";
$query = $query." FROM bf_product p ";
$query = $query."Inner join bf_product_category cp ";
$query = $query."on p.product_id=cp.product_id ";
$query = $query."Where cp.category_id=".$category_id.") limit ".$offset.','.$limit;
$catsandprods= $this->db->query($query);
return $catsandprods->result();
}
答案 2 :(得分:3)
我试过这种方式,多次加入start和limit。你根据选择删除了连接。
$this->db->select('*');
$this->db->from('tbl_requestservice as r');
$this->db->join('tbl_service as s','s.service_id=r.service_id');
$this->db->limit($limit, $start);
$query = $this->db->get();
print_r($query->result());
return $query->result();
答案 3 :(得分:2)
http://code-igniter.ru/user_guide/database/active_record.html
$this->db->start_cache();
$this->db->select('field1');
$this->db->stop_cache();
$this->db->get('tablename');
SELECT field1
FROM(tablename
)
$this->db->select('field2');
$this->db->limit(10);
$this->db->get('tablename');
// SELECT field1
,field2
FROM(tablename
)限制10
$this->db->flush_cache();
$this->db->select('field2');
$this->db->get('tablename');
// SELECT field2
FROM(tablename
)
答案 4 :(得分:1)
你可以使用
$query = "(SELECT cat.id, cat.title ";
$query = $query."FROM bf_categories cat ";
$query = $query."WHERE cat.id=".$category_id." ?";
$this->db->query($query,array($this->db->limit(2, 4)));
或
$this->db->select('id,title')->from('bf_categories ')->where('id', $id)->limit(2, 4);