считая MySQL запрос - PullRequest
0 голосов
/ 16 июня 2009

У меня есть следующий код


$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);

Однако я получаю только один результат ... вот посмотрите на 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, я получаю все предметы обратно. Как я могу подсчитать весь запрос (помимо установленного мной ПРЕДЕЛА), а также получить весь запрос обратно?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 16 июня 2009

Начиная с MySQL 4.0.0, вы можете использовать SQL_CALC_FOUND_ROWS в своем запросе, который скажет MySQL подсчитать общее количество строк без учета предложения LIMIT. Вам все еще нужно выполнить второй запрос, чтобы получить количество строк, но это простой запрос, который просто возвращает количество сохраненных строк.

Использование довольно просто. В ваш основной запрос вам нужно добавить опцию SQL_CALC_FOUND_ROWS сразу после SELECT, а во втором запросе вам нужно использовать функцию FOUND_ROWS (), чтобы получить общее количество строк. Запросы выглядят так:

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

SELECT FOUND_ROWS();

Единственное ограничение заключается в том, что вы должны вызывать второй запрос сразу после первого, потому что SQL_CALC_FOUND_ROWS нигде не сохраняет количество строк.

(скопировано с этой записи )

1 голос
/ 16 июня 2009

Самый эффективный способ - просто запустить два запроса, в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...