Задавайте вопросы, мы ответим
Вы не зашли.
Привет, друзья, всех с празниками )
Есть вроде простая задачка, но интересно как ее решить наиболее красиво
Дано
таблица с полем datetime и еще кучкой полей, суть которых вообще не важна
В эту таблицу попадают некоторые события, количество произвольное, одно событие - одна запись.
Задача нарисовать календарь по которому расставлены эти события, точнее их количество.
Самый очевидный способ (условный запрос)
SELECT datetime, COUNT(*) AS cnt FROM tbl WHERE datetime BETWEEN {%to} AND {%to} GROUP BY DATE(datetime)
результат правильный, но поскольку в какие то дни событий могло не быть - получатся дырки.
А хочется итогом получить сразу полную таблицу, например за январь, в которой будет 31 запись и там где событий не было чтобы cnt = 0, там где были - их количество
Варианты, которые мне пришли в голову:
1. пробежать скриптом от 1-го до 31 января и сделать 31 запрос. Даже комментировать не буду )
2. Получить таблицу выше, потом пробежать скриптом от 1 до 31 и дополнить таблицу отсутствующими датами.
3. Сначала сделать CREATE TEMPORARY TABLE в которую вставить 31 запись с датами, после чего LEFT JOIN ее к основной
4. Еще мне предлагали по крону вставлять в полночь одну запись пустую, но это тоже не вариант.
Как покрасивее решить?
Неактивен
Покрасивее — не заставлять базу делать несвойственные вещи (например,
форматировать красиво таблички). Задача базы данных — добыть данные.
Задача Вашей программы — взять данные из базы и красиво показать. Нолики
по смыслу должна добавлять Ваша программа, а не база. Можно, конечно,
попытаться написать программу в рамках SQL, но, вообще говоря, это костыль
Неактивен
Эмм... Паша, я же не прошу SQL форматировать мне данные. Я прошу мне их дать. Вообще это типичный LEFT JOIN, вот только джойнить мне нечего. Еще например задача - дать мне дни в диапазоне, в которых событий не было. (т.е. это аналог LEFT JOIN ... WHERE ... IS NULL)
Что мне для этого надо сделать? Запросить дни в которых события были (совершенно замечу напрасно), а потом уже скриптом фильтровать?
По моему это задача БД, а не скрипта, разве я не прав?
Я просто задумался, может в SQL можно как то генерировать последовательности(таблицы) на лету?
Неактивен
Именно просишь Ты просишь базу выдать тебе то, чего в ней нет. Это для
базы неестественно. Можешь сделать временную табличку с допустимыми
значениями поля или делать подзапросами. И то, и другое — костыль в своем
роде.
Неактивен