php $db->query 行数,php – 如何在CodeIgniter中组合query()和limit()方法

是否可以在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()方法.

但是限制子句没有包含在查询中……我已经通过在我的控制器中启用codeigniter探查器进行了验证,我可以看到查询是在没有任何限制子句的情况下运行的.

你能告诉我如何使用query()方法完成这个任务吗?

编辑1

我修改了我的模型看起来像这样:

public function get_categories_and_products($limit=5, $offset=0, $category_id=null)

{

print "
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语句.

解决方法:

这是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;

}

}

如果您包含完整查询,则可以更轻松地解决问题或向您展示更好,更有效的方法.

标签:php,mysql,limit,codeigniter,activerecord

来源: https://codeday.me/bug/20190715/1468720.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值