MYSQL фильтр на несколько дат в виде массива - PullRequest
0 голосов
/ 02 июля 2018

Код ниже работает, как и должно, но теперь я хочу добавить несколько дат, например:

bookingStartDate = 2018-07-16, 2018-07-17

SELECT 
    *,
    SUM(IF(reservationId IS NULL,
        0,
        reservationStartDate = '2018-07-17')) AS ConflictingReservations
FROM
    units
        LEFT JOIN
    reservations ON (unitsId = reservationSpace)
WHERE
    unitsType = 'room1'
GROUP BY unitsId
HAVING ConflictingReservations = 0;

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Я бы просто сделал:

SELECT u.unit_id,
       SUM(r.reservationStartDate IN ('2018-07-17')) AS ConflictingReservations
FROM units u LEFT JOIN
     reservations r
     ON u.unitsId = r.reservationSpace
WHERE u.unitsType = 'room1'
GROUP BY u.unitsId
HAVING ConflictingReservations = 0;

Или, еще проще:

SELECT u.*
FROM units u LEFT JOIN
     reservations r
     ON u.unitsId = r.reservationSpace AND
        r.reservationStartDate in ( . . . )
WHERE u.unitsType = 'room1' AND r.reservationSpace IS NULL;

Нет GROUP BY вообще необходимо, потому что вы не используете счет.

0 голосов
/ 02 июля 2018

Использование OR

(reservationStartDate = '2018-07-16' OR reservationStartDate = '2018-07-17')

Полный запрос будет

SELECT 
    *,
    SUM(IF(reservationId IS NULL,
        0,
        (reservationStartDate = '2018-07-17'
            OR reservationStartDate = '2018-07-17'))) AS ConflictingReservations
FROM
    units
        LEFT JOIN
    reservations ON (unitsId = reservationSpace)
WHERE
    unitsType = 'room1'
GROUP BY unitsId
HAVING ConflictingReservations = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...