Мой текущий запрос таков:
SELECT
CAST(COUNT(`MID`) AS UNSIGNED) AS Y,
CONCAT(
LEFT(MONTHNAME(`date`),
3),
' ',
YEAR(`date`)
) AS label
FROM
`reservations`
WHERE
`MID` = 22 AND YEAR(`date`) = YEAR(CURDATE())
GROUP BY
CONCAT(
LEFT(MONTHNAME(DATE),
3),
' ',
YEAR(`date`)
),
YEAR(DATE),
MONTH(DATE)
ORDER BY
YEAR(`date`),
MONTH(`date`) ASC
Это дает следующие результаты, которые мы используем в Google Charts, чтобы показать количество бронирований в месяц.
Проблема в том, что мы получаем только количество созданных резервирований, а не количество дней между начальной датой (date) и конечной датой (dateLast).
Y label
________________
22 Feb 2019
28 Mar 2019
15 Apr 2019
3 May 2019
5 Jun 2019
2 Jul 2019
1 Aug 2019
1 Oct 2019
2 Nov 2019
9 Dec 2019
Я пробовал следующее обновление, но получил ошибку, связанную с оператором BETWEEN:
SELECT
CAST(COUNT(`mid`) AS UNSIGNED BETWEEN `date` AND `dateLast`) AS D, CONCAT(
LEFT(MONTHNAME(DATE),
3), ' ', YEAR(DATE) ),
CAST(COUNT(`mid`) AS UNSIGNED) AS Y,
CONCAT(
LEFT(MONTHNAME(DATE),
3),
' ',
YEAR(DATE)
) AS label
FROM
`reservations`
WHERE
`mid` = 22 AND YEAR(DATE) = YEAR(CURDATE())
GROUP BY
CONCAT(
LEFT(MONTHNAME(DATE),
3),
' ',
YEAR(DATE)
),
YEAR(DATE),
MONTH(DATE)
ORDER BY
YEAR(DATE),
MONTH(DATE) ASC
MySQL сказал: Документация
У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с 'BETWEEN date
AND dateLast
) AS D, CONCAT (LEFT (MONTHNAME (DATE))' в строке 2
Цель состоит в том, чтобы получить СУММУ за все дни, зарезервированные между AND, включая date
до dateLast
Примечание: dateLast
не учитывается, поскольку это дата оформления заказа. Может быть, это слишком сложно для SQL-запроса и должно обрабатываться в PHP как ряд подпрограмм?