9

問題が発生しました...

私はそのようなwhereステートメントをたくさん持っています...

$this->db->where('Pool', "1");
$this->db->where('Bedrooms >=', "3");

次に、制限ステートメント

$this->db->limit($limit, $offset);

そして最後に私の get ステートメント

$query = $this->db->get('table-name');

私の問題は、制限なしで合計行を取得するために、制限ステートメントの前に結果をカウントする必要があることです..だから私はこれを試しました..

$this->db->where('Pool', "1");
$this->db->where('Bedrooms >=', "3");

$num_rows = $this->db->count_all_results();

$this->db->limit($limit, $offset);
$query = $this->db->get('table-name');

これにより、where ステートメントで行が正常にカウントされます。ただし、get ステートメントは、以前の where ステートメントが機能せずにレコードを取得するようになりました。

見えませんが、where ステートメントを処理したり、URL 内のものを取得したりするコードが大量にあるため、これを修正するために、データの取得を 2 回実行したくありません...

乾杯!

4

7 に答える 7

17

これは古い質問であることは知っていますが、この問題に遭遇したばかりで、別の解決策を思いつきました。

アイデアは、制限とオフセットの前に db クラスのコピーを取得することです。

$this->db->where('Pool', "1");
$this->db->where('Bedrooms >=', "3");

//here we use the clone command to create a shallow copy of the object
$tempdb = clone $this->db;
//now we run the count method on this copy
$num_rows = $tempdb->from('table-name')->count_all_results();

$this->db->limit($limit, $offset);
$query = $this->db->get('table-name');
于 2013-07-10T04:29:19.740 に答える
5
$get_data = $this->your_model->get_data();
$data     = $get_data['data'];
$count    = $get_data['count'];

モデル

function get_data($limit = 10, $offset= 0)
{
    $table = 'table-name';
    $where = array('Pool' => 1, 'Beedrooms >=' 3);

    $return['data']  = $this->db->from($table)->where($where)->limit($limit, $offset)->get();
    $return['count'] = $this->db->from($table)->where($where)->count_all_results();

    return $return;
}
于 2012-09-07T22:14:57.753 に答える
1

2 つの異なるクエリを使用する必要があることは明らかです。1 つのクエリを使用してできるだけ早くこれを行うのが最適ですが、2 番目のクエリの前にすべてのレコードを取得する必要があるため、2 つのクエリを使用する必要があります。

ただし、MySQL で使用するエンジンに基づいて最初のクエリを最適化できます。InnoDB を使用する場合SELECT COUNT(*) FROM <table-name>は、合計行サイズが InnoDB にキャッシュされるため、使用する必要があります。

私はパフォーマンスのためにcount_all_rows使用すると信じておりcount(*)、これを直接使用してソートする必要があります。

MyISAM で使用できますCOUNT(<column-name>)

したがって、テーブルのカウントを返すモデルクラスにカウント関数があり、関数を呼び出してデータベースからデータを挿入/更新/取得できます。

于 2012-09-08T18:52:58.883 に答える