OtshelnikFm
@OtshelnikFm
Мои работы: otshelnik-fm.ru

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы