Как вставить значение за "вчера"?

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Как вставить значение за "вчера"?

Сообщение ErmolenkoM » Ср окт 29, 2014 5:11 pm

Решаю задачу - есть ежедневные данные, то есть величина на каждый день. Но поступают эти данные не регулярно - с пропусками по дням, при этом данные за пропущенные дни приходят, но позже. Хочу строить графики. Подскажите как уложить данные за вчерашний/позавчерашний день, что бы на графике все было красиво.
Я как бы понимаю, что можно простой INSERT в phistory, но может есть вариант покрасивее?
aka msh555
Cubian на Cubietruck, Connect
Palko
Сообщения: 59
Зарегистрирован: Вт авг 26, 2014 1:59 pm
Откуда: Новосибирск
Благодарил (а): 8 раз
Поблагодарили: 6 раз

Re: Как вставить значение за "вчера"?

Сообщение Palko » Ср окт 29, 2014 6:07 pm

складывать в массив, а потом UPDATE на нужную глубину в phistory?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Как вставить значение за "вчера"?

Сообщение sergejey » Ср окт 29, 2014 6:40 pm

Что-то ничего в голову не приходит, кроме как приведённый вариант со вставкой в phistory "задним числом"

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Как вставить значение за "вчера"?

Сообщение LutsenkoDenis » Чт окт 30, 2014 10:03 am

Как мне кажется пихать задним числом не лучший вариант.

Сейчас таблица phistory выглядит так:

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `phistory` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `VALUE_ID` int(10) unsigned NOT NULL DEFAULT '0',
  `ADDED` datetime DEFAULT NULL,
  `VALUE` varchar(255) NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `VALUE_ID` (`VALUE_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
Собственно при записи данных в phistory, в поле ADDED добавляется дата записи в таблицу или дата, которую передали.

На мой взгляд в phistory должно быть не одно поле с датой, а два или даже три поля.
Например:
  • LM_DATE - дата, когда что-то изменилось в таблице. (Изменяется всегда при каждой операции с таблицей)
    REG_DATE - дата, когда была вставка данных в таблицу (Дата, когда данные пришли и произошла вставка в таблицу)
    OPER_DATE - дата, которую получили с датчика или еще как. Собственно та дата которая нас интересует.(реальная дата которую передавал счётчик или ещё какое-либо устройство)
Собственно что это даст:
1. По полю LM_DATE, мы можем узнать когда были какие-либо изменения с данными после их первой вставки в таблицу.
2. Поле REG_DATE хранит дату когда была добавлена запись в таблицу.
3. Поле OPER_DATE содержит дату операции, ну там например дата снятия показания со счётчика. По данному полю, как наз можно строить график, так как уже не важно когда пришли данные, сегодня или через месяц.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Как вставить значение за "вчера"?

Сообщение sergejey » Чт окт 30, 2014 11:30 am

Что-то мне кажется не очень хорошая идея с дополнительными полями. Таблица и так одна из самых нагруженных, а добавлять в неё избыточные (в 99% случаев) поля... Ну как-то мне не очень.
За это сообщение автора sergejey поблагодарил:
ErmolenkoM (Чт окт 30, 2014 11:53 am)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Как вставить значение за "вчера"?

Сообщение LutsenkoDenis » Чт окт 30, 2014 1:04 pm

А иметь одно поле с датой, которое можно интерпретировать по разному это хорошая идея?

От того что в таблице будет еще несколько полей, она не станет более нагруженной.

Нагруженная таблица из за того что в данную таблицу пишется практически всё что только можно записать.
И скорее всего, из-за того что при построении запроса к таблице не учитываются индексы, выборка делается достаточно медленно.

Но я не претендую на истину в последней инстанции.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
ksgroup
Сообщения: 135
Зарегистрирован: Ср дек 19, 2012 10:35 am
Откуда: Ukraine/Kiev
Благодарил (а): 7 раз
Поблагодарили: 14 раз

Re: Как вставить значение за "вчера"?

Сообщение ksgroup » Чт окт 30, 2014 7:32 pm

LutsenkoDenis писал(а): Нагруженная таблица из за того что в данную таблицу пишется практически всё что только можно записать.
Присоединяюсь! Таблица перегружена. Может имеет смысл сделать подобную таблицу для каждого класса объектов? Что бы при создании класса создавалась сразу же и его таблица истории. Все объекты одного класса чтоб сохраняли данные в его таблицу. Не будет сотен обращений к одной и той же таблице, таблицы истории станут меньше в размерах, что ускорит поиск в них. Кстати и потеря данных думаю будет менее вероятна. Сейчас если погибнет phistory - погибнет вся накопленная от датчиков информация. Понимаю что резервное копирование наше все, но не будешь же делать копии ежеминутно. Имея одну таблицу теряешь данные всех датчиков за время после резервного копирования, а если своя таблица для каждого класса то теряешь только данные датчиков одного только класса.
CubieBoard A10 - основной сервер Majordomo
Raspberry Pi - цифровая мини АТС ASTERISK
Arduino - блок управления реле, электросчетчик, счетчики воды, управление вентиляционной системой, СКУД.
Ответить