11

私はcodeIgniterリリースされた最新のものを使用しjquery datatablesています。datatables.net

私はこの関数を書きました: https://gist.github.com/4478424 そのままで正常に動作します。テキスト ボックスを使用して何かを入力してフィルター処理する場合を除きます。フィルター自体は発生しますが、カウントが完全にオフになります。

$res = $this->db->count_all_results()の前に追加しようとしましgetたが、get がまったく機能しなくなりました。私が達成する必要があるのは、検索フィルターif ($data['sSearch'] != '')なしでクエリ全体を利用limitして、検索フィルターを使用した合計行数を確認することです。

私の要点以外のコードが必要な場合は、お尋ねください。先に進んで投稿します。

4

7 に答える 7

28

$this->db->count_all_results()$this->db->get()データベース呼び出しで置き換えます。

IE では、 または のいずれcount_all_results()かを呼び出すことができますget()が、両方を呼び出すことはできません。

2 つの別々のアクティブ レコード呼び出しを行う必要があります。1 つは結果 # を割り当てるためのもので、もう 1 つは実際の結果を取得するためのものです。

カウントについては、次のようなものです。

$this->db->select('id');
$this->db->from('table');
$this->db->where($your_conditions);
$num_results = $this->db->count_all_results();

実際のクエリ(すでにあるはずです)の場合:

$this->db->select($your_columns);
$this->db->from('table');
$this->db->where($your_conditions);
$this->db->limit($limit);
$query = $this->db->get();
于 2013-01-07T22:34:21.650 に答える
9

https://www.codeigniter.com/userguide2/database/active_record.html#cachingを読みましたか?

「実際の」合計結果が必要であると同時に制限が必要なページネーションを実行しようとしていることがわかります。

これは、私が CI で行うコードのほとんどで実践しています。

    $this->db->start_cache();

    // 無制限のすべての条件
    $this->db->from();
    $this->db->where(); // や。。など...
    $this->db->stop_cache();

    $total_rows = $this->db->count_all_results(); // これにより、実際の合計行が取得されます

    // ここで行を制限して、ページごとの結果を返すようにします
    $this->db->limit($per_page, $offset);
    $result = $this->db->get();

    配列を返します(
        'total_rows' => $total_rows,
        「結果」 => $結果、
    ); // これをコントローラーに返します。

上記のコードをテストせずに入力しましたが、次のように動作するはずです。私はすべてのプロジェクトでこれを行います。

于 2013-01-08T03:46:46.207 に答える
4

実際に from を持つ必要はありません。そのように count_all_results にテーブル名を含めることができます。

$this->db->count_all_results('table_name');
于 2016-07-11T14:02:59.130 に答える
4

no_reset_flag で最初にカウントします。

$this->db->count_all_results('', FALSE);
$rows = $this->db->get()->result_array();

システム/データベース/DB_query_builder.php

public function count_all_results($table = '', $reset = TRUE) { ... }
于 2018-06-21T06:30:46.517 に答える
1

$this->db->count_all_results();

実際には次のものを置き換えます。

$this->db->get();

したがって、実際には両方を持つことはできません。

同じクエリで取得と num 行の計算の両方を行いたい場合は、次のように簡単に実行できます。

$this->db->from(....);
$this->db->where(....);
$db_results = $this->get();

$results = $db_results->result();
$num_rows = $db_results->num_rows();
于 2013-01-08T00:38:00.410 に答える
0

これを試して

 /**
        * @param $column_name   :   Use In Choosing Column name
        * @param $where         :   Use In Condition Statement
        * @param $table_name    :   Name of Database Table
        * Description           :   Count all results   
        */ 
    function count_all_results($column_name = array(),$where=array(), $table_name = array())
    {
        $this->db->select($column_name);
        // If Where is not NULL
        if(!empty($where) && count($where) > 0 )
        {
            $this->db->where($where);
        }
        // Return Count Column
        return $this->db->count_all_results($table_name[0]);//table_name array sub 0
    }

次に、メソッドを単純に呼び出します

このような

$this->my_model->count_all_results(['column_name'],['where'],['table name']);
于 2018-02-14T06:08:26.860 に答える
0

クエリに group by が含まれている場合、count_all_results の使用は失敗します。これを回避する簡単な方法を書きました。クエリを 2 回書き込むのを防ぐための鍵は、それらすべてを 2 回呼び出せるプライベート メソッド内に配置することです。サンプルコードは次のとおりです。

class Report extends CI_Model {
    ...
    public function get($page=0){
        $this->_complex_query();
        $this->db->limit($this->results_per_page, $page*$this->results_per_page);
        $sales = $this->db->get()->result(); //no table needed in get()

        $this->_complex_query();
        $num_results = $this->_count_results();

        $num_pages = ceil($num_results/$this->results_per_page);

        //return data to your controller
    }

    private function _complex_query(){
        $this->db->where('a', $value);
        $this->db->join('(subquery) as s', 's.id = table.s_id');
        $this->db->group_by('table.column_a');

        $this->db->from('table'); //crucial - we specify all tables here
    }

    private function _count_results(){
        $query = $this->db->get_compiled_select();
        $count_query = "SELECT count(*) as num_rows FROM (".$query.") count_wrap";
        $r = $this->db->query($count_query)->row();
        return $r->num_rows;
    }
}
于 2018-10-01T16:51:01.170 に答える