Как составить список групп и количества незавершенных задач? - PullRequest
1 голос
/ 17 декабря 2011

У меня есть две таблицы БД:

tasks:
task_id (unique id, autoincrement)
group_id (from the next table: groups, where task belongs to)
task_name
status (if task has been completed or not)

groups:
group_id (unique id, autoincrement)
group_name

Моя цель - перечислить все группы вместе с количеством незавершенных задач в них (статус задачи 0). Я добиваюсь этого по этому запросу:

$sql_query = "SELECT g.id, g.name, count(g.id) as count
FROM task_groups g, tasks t
WHERE g.status = 0 AND t.group =  g.id AND t.status = 0
GROUP BY g.id
ORDER BY g.id ASC";

И я получаю такие результаты:

Group1  3 uncompleted
Group2 13 uncompleted
Group3 30 uncompleted

Но пустые группы задач (нет задач, относящихся к определенной группе) не перечислены.

Результат должен быть таким:

Group1  3 uncompleted
Group2 13 uncompleted
Group3 30 uncompleted
Group4  0 uncompleted
Group5  0 uncompleted

Как мне этого добиться?

1 Ответ

2 голосов
/ 17 декабря 2011

Вы на правильном пути.GROUP BY группу, но вместо подсчета идентификатора группы попробуйте вместо этого выполнить SUM для неполных задач, например:

SELECT g.id, g.name,
SUM(IF(t.status = 0, 1, 0)) incomplete_tasks
FROM task_groups g
LEFT JOIN tasks t ON (t.group_id = g.id)
GROUP BY g.id ASC
HAVING incomplete_tasks > 0;

Пропустите предложение HAVING, если хотите отобразить список все группы задач.

Примечание. Я не вижу цели g.status в вашем запросе, а status не указан в качестве столбца в groups таблица, поэтому я исключил ее из своего примера.

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