0

次のコードがあります


$result = $handle->select()->from('store_products_id', array('count'=>'COUNT(store_products_id.product_id)'))
                                       ->where('store_products_id.store_id=?', $this->store_id)
                                       ->columns($selectColumns)
                                       ->join('product_quickinfo', 'store_products_id.product_id = 
                                              product_quickinfo.product_id')

                                       ->join('image_paths', 'product_quickinfo.image_id = 
                                              image_paths.image_id')

                                       ->order('product_quickinfo.date_created DESC')
                                       ->limitPage($this->page_number, $this->sum_each_page)
                                       ->query(ZEND_DB::FETCH_OBJ);

ただし、返される結果は 1 つだけです。print_r を次に示します。


Array ( [0] => stdClass Object ( [count] => 14 [small_path] => 1 [product_name] => v evrecvrv [price] => 22 [product_id] => 1 [image_id] => 1 [date_created] => 0000-00-00 00:00:00 [large_path] => [description] => ) )

COUNT コントローラーを削除すると、すべてのアイテムが元に戻ります。クエリ全体を (課した LIMIT を超えて) カウントし、クエリ全体を取得するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

4

MySQL 4.0.0 以降、クエリで SQL_CALC_FOUND_ROWS を使用できます。これにより、MySQL は LIMIT 句を無視して合計行数をカウントするようになります。行数を取得するには 2 つ目のクエリを実行する必要がありますが、これは格納されている行数を取得するだけの単純なクエリです。

使い方はとても簡単です。メインクエリでは、SELECT の直後に SQL_CALC_FOUND_ROWS オプションを追加する必要があり、2 番目のクエリでは FOUND_ROWS() 関数を使用して行の総数を取得する必要があります。クエリは次のようになります。

SELECT SQL_CALC_FOUND_ROWS name, email 
FROM users 
WHERE name LIKE 'a%' 
LIMIT 10;

SELECT FOUND_ROWS();

唯一の制限は、SQL_CALC_FOUND_ROWS は行数をどこにも保存しないため、最初のクエリの直後に 2 番目のクエリを呼び出す必要があることです。

(この投稿からコピー)

于 2009-06-15T21:22:42.513 に答える
1

この場合、最も効率的な方法は、単純に 2 つのクエリを実行することです。

于 2009-06-15T21:03:57.833 に答える