Я пытаюсь получить количество записей в определенные даты. Проблема в том, что когда дата не имеет записей, она не показывает дату.
$asksome= mysqli_query("
SELECT COUNT(worker_id) AS amount, problem.datter AS datum
FROM problem
WHERE worker_id = $idmed
GROUP BY datter"
);
Структура выглядит так:
worker_id | datter | note
1 |2018-02-25 |
1 |2018-02-26 |
3 |2018-02-25 |
Это запрос, который я использую. Я хочу, чтобы запрос показывал даты, даже если COUNT равен 0. Я имею в виду, что я хочу, чтобы результат был таким:
count result | date
0 | 2018-02-24
2 | 2018-02-25
1 | 2018-02-26
0 | 2018-02-27
- - Для людей, которые находят этот пост, не зная, что делать: я исправил свою проблему, создав другую таблицу, которая просто содержала конкретные даты, которые я хочу проверить. Я использовал следующий запрос:
SELECT weeks.week_id AS datum, COUNT(problem.datter) AS amount
FROM weeks
LEFT JOIN problem ON problem.datter = weeks.week_id
GROUP BY weeks.week_id
Вы должны четко указать, как обрабатывать счетчик, когда он равен 0. В общем случае при использовании SQL SUM()
и COUNT()
вместе с оператором GROUP BY
0 никогда не выводится. И это потому, что предложение GROUP BY
не имеет ничего общего с тем, когда нет записей для вашего подсчета 0.
Для этого вы можете использовать выражение COALESCE.
Вы можете увидеть его документацию здесь: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/coalesce-transact-sql
Поэтому в вашем примере запрос sql должен быть:
SELECT COALESCE (SELECT COUNT(worker_id) AS amount, problem.datter AS datum
FROM problem
WHERE worker_id = $idmed
GROUP BY datter"), 0);
mysqli
значительно менее многословен, что облегчает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсомmysql_query
. Прежде, чем вы слишком инвестируете в процедурный стиль, стоит переключиться. Пример:$db = new mysqli(…)
и$db->prepare("…")
Процедурный интерфейс является артефактом эпохи PHP 4, когда был представленmysqli
API, и его не следует использовать в новом коде.