具有连接的CodeIgniter活动记录限制

时间:2015-11-02 00:20:38

标签: php sql codeigniter

我的模型中有以下功能:

function getLocations($limit = null, $offset = null){
    $this->db->select('*');
    $this->db->from('location');
    $this->db->join('process', 'process.process_id=location.process_id');
    $this->db->join('line', 'line.line_id=process.line_id');
    $this->db->limit($limit, $offset);
    $this->db->order_by('location_id', 'asc');
    return $this->db->get()->result();
}

然后使用:$this->the_model->getLocations()执行,从而产生以下查询:

SELECT *
FROM "location"
JOIN "process" ON "process"."process_id"="location"."process_id"
JOIN "line" ON "line"."line_id"="process"."line_id"
ORDER BY "location_id" asc LIMIT 0

注意LIMIT 0,执行$this->db->order_by('item_id', 'asc')->get('item', $limit, $offset)->result()时不会发生这种情况。没有LIMIT 0偶数限制,偏移量为null。那么,如何解决这个问题呢?当limit为null时,我已经添加if条件。

3 个答案:

答案 0 :(得分:1)

0是一个值。这并不意味着0NULL。虽然NULL根本没有价值。

对于您的情况,

function getLocations($limit = 1, $offset = 0){
                               ^            ^ 
    $this->db->select('*');
    $this->db->from('location');
    $this->db->join('process', 'process.process_id=location.process_id');
    $this->db->join('line', 'line.line_id=process.line_id');
    $this->db->limit($limit, $offset);
    $this->db->order_by('location_id', 'asc');
    return $this->db->get()->result();
}

limit至少1和偏移量设为0作为默认值。

答案 1 :(得分:1)

试试这个

function getLocations($limit , $offset){
    $query = $this->db->query(
        "SELECT *
        FROM location
        JOIN process ON process.process_id=location.process_id
        JOIN line ON line.line_id=process.line_id
        ORDER BY location_id asc LIMIT $limit, $offset");
    $result = $query->result_array();
    return $result;
}

不要设置$limit = NULL。这将解决问题

答案 2 :(得分:0)

感谢那些回答我问题的人。

我通过将代码调整为:

来解决这个问题
function getLocations($limit = null, $offset = null){
    $this->db->select('*');
    $this->db->join('process', 'process.process_id=location.process_id');
    $this->db->join('line', 'line.line_id=process.line_id');
    $this->db->order_by('location_id', 'asc');
    return $this->db->get('location', $limit, $offset)->result();
}

这样生成的查询中就没有LIMIT 0,即使$limitnull

非常感谢。