MySQL совокупные трудности - PullRequest
0 голосов
/ 11 апреля 2011

В моей базе данных есть две структуры таблиц:

CREATE TABLE `projects` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(32) DEFAULT NULL,
 `description` varchar(128) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

CREATE TABLE `issues` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `member_id` varchar(10) DEFAULT NULL,
 `project_id` int(11) DEFAULT NULL,
 `name` varchar(32) DEFAULT NULL,
 `description` varchar(128) DEFAULT NULL,
 `date_created` date DEFAULT NULL,
 `type` enum('general','bug','requirement') DEFAULT NULL,
 `priority` enum('low','medium','high') DEFAULT NULL,
 `status` enum('resolved','open','discarded') DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `member_id` (`member_id`),
 KEY `project_id` (`project_id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

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

select projects.name, count(*) from projects left join issues on projects.id = issues.project_id where status = 'resolved' group by projects.name

Однако это возвращает только проекты, в которых есть хотя бы одна решенная проблема, мне нужно вернуть также проекты с 0 решенными проблемами.

Прошло много времени с тех пор, как я создал mySQL, кто-нибудь может помочь? Спасибо.


Я думал, что дам больше информации, так как я еще не получил рабочего ответа. Если бы у меня было четыре проекта и одна проблема для каждого проекта, причем две из этих проблем были «решены», я ожидал бы, что запрос вернется:

project_name    | count(*)
--------------------------
first_project   | 1
second_project  | 0
third_project   | 0
fourth_project  | 1

Однако запрос возвращает только проекты, в которых есть хотя бы одна решенная проблема.

project_name   | count(*)
-------------------------
first_project  | 1
fourth_project | 1

1 Ответ

1 голос
/ 11 апреля 2011

измените ваш запрос на:

   SELECT p.name, count(i.*)
     FROM PROJECTS p    
LEFT JOIN ISSUES i ON p.id = i.project_id 
                  AND i.status = 'resolved'
 GROUP BY projects.name

наличие "status = 'resolved" "в предложении where заставило его возвращать только те проекты, у которых есть хотя бы одна проблема

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