Решаю задачу - есть ежедневные данные, то есть величина на каждый день. Но поступают эти данные не регулярно - с пропусками по дням, при этом данные за пропущенные дни приходят, но позже. Хочу строить графики. Подскажите как уложить данные за вчерашний/позавчерашний день, что бы на графике все было красиво.
Я как бы понимаю, что можно простой INSERT в phistory, но может есть вариант покрасивее?
Как вставить значение за "вчера"?
Модератор: immortal
-
- Сообщения: 560
- Зарегистрирован: Ср сен 04, 2013 10:31 am
- Откуда: Самара
- Благодарил (а): 99 раз
- Поблагодарили: 140 раз
- Контактная информация:
-
- Сообщения: 59
- Зарегистрирован: Вт авг 26, 2014 1:59 pm
- Откуда: Новосибирск
- Благодарил (а): 8 раз
- Поблагодарили: 6 раз
Re: Как вставить значение за "вчера"?
складывать в массив, а потом UPDATE на нужную глубину в phistory?
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Как вставить значение за "вчера"?
Что-то ничего в голову не приходит, кроме как приведённый вариант со вставкой в phistory "задним числом"
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Как вставить значение за "вчера"?
Как мне кажется пихать задним числом не лучший вариант.
Сейчас таблица phistory выглядит так:
Собственно при записи данных в phistory, в поле ADDED добавляется дата записи в таблицу или дата, которую передали.
На мой взгляд в phistory должно быть не одно поле с датой, а два или даже три поля.
Например:
1. По полю LM_DATE, мы можем узнать когда были какие-либо изменения с данными после их первой вставки в таблицу.
2. Поле REG_DATE хранит дату когда была добавлена запись в таблицу.
3. Поле OPER_DATE содержит дату операции, ну там например дата снятия показания со счётчика. По данному полю, как наз можно строить график, так как уже не важно когда пришли данные, сегодня или через месяц.
Сейчас таблица 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 должно быть не одно поле с датой, а два или даже три поля.
Например:
- LM_DATE - дата, когда что-то изменилось в таблице. (Изменяется всегда при каждой операции с таблицей)
REG_DATE - дата, когда была вставка данных в таблицу (Дата, когда данные пришли и произошла вставка в таблицу)
OPER_DATE - дата, которую получили с датчика или еще как. Собственно та дата которая нас интересует.(реальная дата которую передавал счётчик или ещё какое-либо устройство)
1. По полю LM_DATE, мы можем узнать когда были какие-либо изменения с данными после их первой вставки в таблицу.
2. Поле REG_DATE хранит дату когда была добавлена запись в таблицу.
3. Поле OPER_DATE содержит дату операции, ну там например дата снятия показания со счётчика. По данному полю, как наз можно строить график, так как уже не важно когда пришли данные, сегодня или через месяц.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Как вставить значение за "вчера"?
Что-то мне кажется не очень хорошая идея с дополнительными полями. Таблица и так одна из самых нагруженных, а добавлять в неё избыточные (в 99% случаев) поля... Ну как-то мне не очень.
- За это сообщение автора sergejey поблагодарил:
- ErmolenkoM (Чт окт 30, 2014 11:53 am)
- Рейтинг: 1.16%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Как вставить значение за "вчера"?
А иметь одно поле с датой, которое можно интерпретировать по разному это хорошая идея?
От того что в таблице будет еще несколько полей, она не станет более нагруженной.
Нагруженная таблица из за того что в данную таблицу пишется практически всё что только можно записать.
И скорее всего, из-за того что при построении запроса к таблице не учитываются индексы, выборка делается достаточно медленно.
Но я не претендую на истину в последней инстанции.
От того что в таблице будет еще несколько полей, она не станет более нагруженной.
Нагруженная таблица из за того что в данную таблицу пишется практически всё что только можно записать.
И скорее всего, из-за того что при построении запроса к таблице не учитываются индексы, выборка делается достаточно медленно.
Но я не претендую на истину в последней инстанции.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 135
- Зарегистрирован: Ср дек 19, 2012 10:35 am
- Откуда: Ukraine/Kiev
- Благодарил (а): 7 раз
- Поблагодарили: 14 раз
Re: Как вставить значение за "вчера"?
Присоединяюсь! Таблица перегружена. Может имеет смысл сделать подобную таблицу для каждого класса объектов? Что бы при создании класса создавалась сразу же и его таблица истории. Все объекты одного класса чтоб сохраняли данные в его таблицу. Не будет сотен обращений к одной и той же таблице, таблицы истории станут меньше в размерах, что ускорит поиск в них. Кстати и потеря данных думаю будет менее вероятна. Сейчас если погибнет phistory - погибнет вся накопленная от датчиков информация. Понимаю что резервное копирование наше все, но не будешь же делать копии ежеминутно. Имея одну таблицу теряешь данные всех датчиков за время после резервного копирования, а если своя таблица для каждого класса то теряешь только данные датчиков одного только класса.LutsenkoDenis писал(а): Нагруженная таблица из за того что в данную таблицу пишется практически всё что только можно записать.
CubieBoard A10 - основной сервер Majordomo
Raspberry Pi - цифровая мини АТС ASTERISK
Arduino - блок управления реле, электросчетчик, счетчики воды, управление вентиляционной системой, СКУД.
Raspberry Pi - цифровая мини АТС ASTERISK
Arduino - блок управления реле, электросчетчик, счетчики воды, управление вентиляционной системой, СКУД.