1

私はこの機能を持っています:

   function gi_get_by($col,$id, $itd, $tbl, $limit = 10)
        {    
        $this->db->select('*');
        $this->db->from('global_info');
        $this->db->join($tbl, 'id_' . $tbl . ' = id_global_info');
        $this->db->where('info_type_id', $itd);
        if($col == 'date_created' || $col == 'tag') {$this->db->like($col, $id);}        
        else {$this->db->where($col, $id);}
        if($tbl == 'ad') :
        $this->db->order_by('paid', 'desc');
        endif;
        $this->db->order_by('date_created', 'desc');  
        $this->db->limit($limit, $this->uri->segment(2));
        $q = $this->db->get();        
        return $q = $q->result_array();   
        }

私が必要とするのは、制限の前に結果の数を数え、後でコントローラーで使用することです。$limitなしでこの関数を複製することを考えていますが、同じ関数を複製することになります。これを行う別の方法はありますか、それとも複製する必要がありますか?

4

4 に答える 4

2

何をしたいのかよくわかりませんが、オプションの制限が必要な場合は、デフォルトでfalseに設定できます。

 function gi_get_by($col,$id, $itd, $tbl, $limit=false)
        {    
        $this->db->select('*');
        $this->db->from('global_info');
        $this->db->join($tbl, 'id_' . $tbl . ' = id_global_info');
        $this->db->where('info_type_id', $itd);
        if($col == 'date_created' || $col == 'tag') {$this->db->like($col, $id);}        
        else {$this->db->where($col, $id);}
        if($tbl == 'ad') :
        $this->db->order_by('paid', 'desc');
        endif;
        $this->db->order_by('date_created', 'desc');
        if ($limit) {  
          $this->db->limit($limit, $this->uri->segment(2));
        }
        $q = $this->db->get();        
        return $q = $q->result_array();   
        }

これにより、関数に渡された場合に条件付きでlimit句が追加されます。

$this->uri->segment(2)また、関数内からアクセスするのではなく、パラメーターとして関数に何でも渡すのが最善です。

于 2012-09-27T19:43:00.457 に答える
1

選ばない理由

sql_calc_found_rows

あなたのクエリで?

http://www.justincarony.com/blog/2008/07/01/mysql-php-sql_calc_found_rows-an-easy-way-to-get-the-total-number-of-rows-regardless-of-limit/

于 2012-09-27T19:39:21.190 に答える
0

ActiveRecordCacheを使用する必要があります。

http://codeigniter.com/user_guide/database/active_record.html#caching

function gi_get_by($col,$id, $itd, $tbl, $limit = 10)
{    
    // Start the cache
    $this->db->start_cache();

    $this->db->select('*');
    $this->db->from('global_info');
    $this->db->join($tbl, 'id_' . $tbl . ' = id_global_info');
    $this->db->where('info_type_id', $itd);
    if($col == 'date_created' || $col == 'tag') {$this->db->like($col, $id);}        
    else {$this->db->where($col, $id);}
    if($tbl == 'ad') :
    $this->db->order_by('paid', 'desc');
    endif;
    $this->db->order_by('date_created', 'desc');

    // Stop the cache
    $this->db->stop_cache();

    // Get the total
    $total = $this->db->count_all_results();

    // Now set the limit
    $this->db->limit($limit, $this->uri->segment(2));

    $q = $this->db->get();

    // Important! Clear the cache
    $this->db->flush_cache();

    return $q = $q->result_array();   
}
于 2012-09-27T19:46:49.737 に答える
0

では、次のようなものはどうでしょうか。

function gi_get_by($col,$id, $itd, $tbl, $limit = 10)
{
    $count = $this->db->query('SELECT * FROM my_table')->num_rows();

    //the rest stuff
}
于 2012-09-27T19:39:08.727 に答える