2016-06-29 4 views
0

Я пытаюсь найти способ выбора и подсчета некоторых строк в моей базе данных. Я проверял документы MySQL, и это то, что я придумал:Выберите и подсчитайте строки в одном запросе?

$query = "SELECT *, COUNT(*) as total WHERE IMAGE != '' AND CATEGORY = '$category' $limit"; 

Но это выводит одну строку, когда сделано ... :(

Чем я пробовал:

$query = "SELECT * FROM PRODUCTS, 
     (SELECT COUNT(*) as total FROM PRODUCTS WHERE IMAGE != '' AND CATEGORY = '$category') as x 
     WHERE IMAGE != '' AND CATEGORY = '$category' $limit"; 

Это работает, однако я не знаю, будет ли это работать хорошо, из-за двух операторов SELECT (lus мне не нужно «как x», но без этого запрос не получается).

Есть ли лучший способ? Благодаря

+0

Можете ли вы предоставить некоторые выборочные данные и ожидаемые результаты от вашего запроса? – mba12

+1

Было бы лучше, если бы код не выглядел уязвимым для SQL Injection. – spencer7593

+1

Я думаю, вы ищете [SQL_CALC_FOUND_ROWS] (http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows), см., Например, [этот вопрос] (http://stackoverflow.com/questions/12887266/get-total-number-of-rows-when-using-limit) – Solarflare

ответ

0

Другой путь с помощью sub-query, но не уверен, что о производительности должна быть выполнена только один раз, так как нет никакой корреляции с внешней таблицы

SELECT *, (select COUNT(*) from PRODUCTS) as total 
WHERE IMAGE != '' 
AND CATEGORY = '$category' $limit 
+0

спасибо, но ваш запрос, к сожалению, дает NULL. :( –

Смежные вопросы