2015-05-11 3 views
0

Мне нужно получить некоторые значения из базы данных и подсчитать все строки.MySql и PHP - выберите Count

Я написал этот код:

SELECT author, alias, (select COUNT(*) from registry WHERE status='OK' AND type='H1') AS count 
FROM registry 
WHERE status='OK' AND type='H1' 

его работу, но, как я могу упростить этот код? оба WERE состояние.

Thank you.

+0

Вы пытаетесь получить оценку по этим критериям от автора? Посмотрите на использование GROUP BY вместо подзапроса –

+1

@ShadMickelberry: Думаю, он пытается вывести общее количество в каждой строке. – potashin

ответ

0

Если запрос возвращает нужный вам набор результатов, с «полным» количеством строк (независимо от автора и псевдонима), с тем же точным значением для «count», повторяющимся в каждой строке, мы могли бы переписать запрос как это:

SELECT t.author 
    , t.alias 
    , s.count 
    FROM registry t 
CROSS 
    JOIN (SELECT COUNT(*) AS `count` 
      FROM registry c 
      WHERE c.status='OK' 
      AND c.type='H1' 
     ) s 
WHERE t.status='OK' 
    AND t.type='H1' 

Я не знаю, если это проще, а кому-то читал заявление, я думаю, что это делает его более ясным, что ResultSet возвращается.

(я также, как правило, в пользу избегая любого подзапроса в списке SELECT,, если нет особых причин, чтобы добавить один.)

результирующего из этого запроса является немного странным. Но при отсутствии каких-либо данных примера, ожидаемого вывода или каких-либо спецификаций, отличных от исходного запроса, мы просто догадываемся. Запрос в моем ответе реплицирует результаты исходного запроса таким образом, который более ясен.

0

попробовать это:

SELECT author, alias, count(1) AS caunt 
FROM registry 
WHERE status='OK' AND type='H1' 
group by author, alias 
+0

Мы должны указать, что результат, возвращаемый этим запросом, * значительно * отличается от результата, возвращаемого исходным запросом. – spencer7593

0

статус и типа критерии для извлечения полей из таблицы. Вы не можете пойти проще, чем это.

0

Попробуйте использовать группу по,

SELECT author, alias, COUNT(*) AS COUNT 
FROM registry 
WHERE STATUS='OK' AND TYPE='H1' 
GROUP BY author, alias 

В зависимости от того, как таблица создана, вы можете на самом деле нужно сделать это, чтобы получить данные, которые вы ищете.

Некоторые хорошее чтение для этого: https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

Однако, если Вы желаете графа быть просто все записи с этого критерия, то, что у вас есть, может быть простейшим уже.

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