Оптимизация запросов MySQL (объединение похожих результатов запроса) - PullRequest
0 голосов
/ 24 февраля 2012

В MySQL я написал следующий запрос. Повторная выборка всех этих данных с использованием JOIN не кажется мне наиболее эффективным способом. Как бы вы переписали его, чтобы сделать его более эффективным?

SELECT * FROM (
    SELECT COUNT(*) AS 'total' FROM `the_table`
    WHERE `subject_id`=7 ) a
JOIN (
    SELECT COUNT(*) AS 'unread' FROM `the_table`
    WHERE `subject_id`=7 AND `read`=0 ) b

EDIT:

Я пытаюсь получить таблицу с 2 столбцами: «итого» и «непрочитанный» с одной строкой, имеющей значения INT, например

всего: 200 непрочитано: 20

1 Ответ

6 голосов
/ 24 февраля 2012

Поскольку предложение where такое же, за исключением условия чтения, вы можете использовать SUM / CASE

 SELECT COUNT(*) AS 'total' , 
       SUM(CASE WHEN `read`=0 THEN 1 ELSE 0 END) as `unread`
 FROM `the_table`
 WHERE `subject_id`=7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...