php - 如何在 CodeIgniter 中组合 query() 和 limit() 方法

标签 php mysql codeigniter activerecord 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() 方法的原因。

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

你能告诉我如何使用 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

因此它创建了两个单独的选择语句。

最佳答案

我试过这种方式,多重加入开始和限制。您根据选择删除加入。

    $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();

关于php - 如何在 CodeIgniter 中组合 query() 和 limit() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036641/

相关文章:

php - 如何从 php 进行的 SQL 查询中获取值?

MySQL 无法以只读方式执行语句

javascript - 显示 JS 警报并重定向到函数

php - 如何让 Uploadify 与 Codeigniter + CSRF 一起工作?

javascript - 在 PHP 中回显时,新行在 Javascript 函数中不起作用

PHP 验证后提交到数据库

php - MySQL 变量不能立即可用

javascript - XMLHttpRequest 无法加载

php - 将自定义 css 添加到生成的 CSS 文件中

php - 关联数组中的键是否存在