Во-первых, убедитесь, что from
и until
являются типами MySQL DATE
и не хранятся в виде строк.
Если эти столбцы имеют тип данных MySQL DATE
, то мы можем сделать что-то вроде этого:
SELECT r.id AS room_id
, r.quantity - IFNULL(SUM(IF('2012-12-01' BETWEEN v.from AND v.until, v.quantity, 0)),0) AS `1`
, r.quantity - IFNULL(SUM(IF('2012-12-02' BETWEEN v.from AND v.until, v.quantity, 0)),0) AS `2`
, r.quantity - IFNULL(SUM(IF('2012-12-03' BETWEEN v.from AND v.until, v.quantity, 0)),0) AS `3`
, ...
FROM room r
LEFT
JOIN room_reservation v
ON v.room_id = r.id
AND v.until >= '2012-12-01'
AND v.from <= '2012-12-31'
GROUP BY r.id, r.quantity
ORDER BY r.id
Если это не типы данных DATE
и не являются строками в каноническомYYYY-MM-DD
формат, тогда мы можем использовать функцию MySQL STR_TO_DATE
для преобразования в DATE
.SQL будет немного сложнее.