Как выбрать count (), если есть значение, но ничего не выбрать, если значение равно 0 - PullRequest
0 голосов
/ 23 марта 2019

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

Проблема, которую я получаю, заключается в том, что когда нет заказов, я ничего не получаю из запроса sql, но когда есть заказы, я получаю правильную информацию. Если я заберу количество забронированных билетов у избранных, все будет работать, но мне нужна вся эта информация.

SELECT
    class_instances.instance_sdate,
    classes.class_name,
    classes.class_max,
    users.user_name_first,
    users.user_name_last,
    COUNT(bookings.booking_id)
FROM
    `computing-project`.class_instances class_instances,
    `computing-project`.classes classes,
    `computing-project`.users users,
    `computing-project`.bookings bookings
WHERE
    DATE(class_instances.instance_sdate) = DATE(NOW()) AND
    class_instances.class_id = classes.class_id AND
    classes.teacher_id = users.user_id AND
    bookings.instance_id = class_instances.instance_id

Набор данных: https://imgur.com/JDjkK0G

Этот код выше работает, только если кто-то забронировал класс. не тогда, когда в классе нет зарегистрированных участников.

я все еще получаю счетчик, возвращенный как 0, но никаких других результатов для других столбцов

  • надеюсь, что это имеет смысл.

Ожидаемый результат

+-----------------------+------------+-----------+-----------------+----------------+----------------------------+
|    instance_sdate     | class_name | class_max | user_name_first | user_name_last | count(bookings.booking_id) |
+-----------------------+------------+-----------+-----------------+----------------+----------------------------+
| 2019-03-23 16:38:00.0 | Test       |        11 | Louis           | Simpson        |                          0 |
| 2019-03-23 16:39:00.0 | Test2      |        12 | Louis           | Simpson        |                          0 |
+-----------------------+------------+-----------+-----------------+----------------+----------------------------+

1 Ответ

1 голос
/ 23 марта 2019

Если вы хотите также не бронировать, вам нужно левое соединение (внешнее) соединение

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

SELECT
    class_instances.instance_sdate,
    classes.class_name,
    classes.class_max,
    users.user_name_first,
    users.user_name_last,
    COUNT(bookings.booking_id)
FROM `computing-project`.class_instances class_instances
INNER JOIN  `computing-project`.classes classes ON class_instances.class_id = classes.class_id 
INNER JOIN  `computing-project`.users users ON  classes.teacher_id = users.user_id 
LEFT  JOIN  `computing-project`.bookings bookings ON bookings.instance_id = class_instances.instance_id 
WHERE  DATE(class_instances.instance_sdate) = DATE(NOW())
GROUP BY  class_instances.instance_sdate,
    classes.class_name,
    classes.class_max,
    users.user_name_first,
    users.user_name_last
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...