OtshelnikFm
@OtshelnikFm
Обо мне расскажет yawncato.com

Как писать данные на каждый день в статистику — дублировать или пропускать?

Пишется статистика на каждый день.
Структура:
date             | type   | num
2020-04-06 | rating | 384


Событий получается штук 40-к и некоторые события не меняются ежедневно.
Вопрос - стоит ли писать такие данные в БД на каждый день?

Пример: тип rating. Вчера он был = 384, сегодня также 384 - получается я забиваю неизменяемые данные и нарушаю принципы DRY.

Но если я буду писать только измененные данные - я не понимаю как мне получить выборку из базы.
SELECT * 
FROM `site_statistics` 
WHERE type = 'rating'
AND date = '2020-04-06'


- не вернет мне ничего. Но там могут быть данные за вчера. Как мне получить ближайшие снисходящие по дате данные в таком случае? если например неделю назад была запись, каким-то образом подзапросом найти последнее значение типа?

Получать надо в статистике данные за текущий день, но если они не изменялись - то брать последнее значение за ближайшие дни когда запись была.

Или все же не стоит заморачиваться и каждый день писать одно и тоже значение в базу?

Тогда там может быть:
2020-04-06 | rating | 384
2020-04-05 | rating | 384
2020-04-04 | rating | 384
2020-04-03 | rating | 384
2020-04-02 | rating | 384
2020-04-01 | rating | 384
2020-03-31 | rating | 384
2020-03-30 | rating | 360

Напомню: что пока событий 40-к и есть вероятность что их будет больше.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
если вчера была температура 27 градусов, и сегодня 27, может метеорологам не стоит записывать каждый день температуру?
Естественно писать, если эти параметры относятся к логированию и построению какой-либо статистики, и к DRY это никаким боком не относится.
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Пишите каждый день. С принципами DRY это не имеет ничего общего.
Если задача хранить итог за каждый день, то его надо записывать и хранить.

каким-то образом подзапросом найти последнее значение типа

Делать это в приложении, а не в БД. Выстраивается временная шкала в приложении (напр. массив со списком дней), где есть каждый нужный день, и на неё накладываем данные из БД последовательно, если данных нет то выводим или ноль или крайнее значение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы