значения переменных класса

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

Модератор: immortal

directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

значения переменных класса

Сообщение directman66 » Чт апр 26, 2018 3:36 pm

Друзья, никак не понял, каким образом можно получить значения свойств объекта класса через sql

Допустим есть объект 570,

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

SELECT * from pvalues where OBJECT_ID=570 
тут хранятся его свойства, но только те, что не описаны в классе.

А где хранятся описанные классом свойства? Их получается нет в properties и нет в pvalues.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
fandaymon
Сообщения: 1570
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: значения переменных класса

Сообщение fandaymon » Чт апр 26, 2018 10:50 pm

directman66 писал(а):
Чт апр 26, 2018 3:36 pm
Друзья, никак не понял, каким образом можно получить значения свойств объекта класса через sql

Допустим есть объект 570,

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

SELECT * from pvalues where OBJECT_ID=570 
тут хранятся его свойства, но только те, что не описаны в классе.

А где хранятся описанные классом свойства? Их получается нет в properties и нет в pvalues.
Судя по коду
$properties=SQLSelect("SELECT * FROM properties WHERE OBJECT_ID='".$id."'");
$total=count($properties);
for($i=0;$i<$total;$i++) {
$p_id=$properties[$i]['ID'];
$p_value=SQLSelectOne("SELECT * FROM pvalues WHERE PROPERTY_ID='".$p_id."'");
}

получается что сначала надо найти ID нужной property для нужного объекта, а потом получить значение для данной property из таблицы pvalues
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: значения переменных класса

Сообщение directman66 » Чт апр 26, 2018 10:58 pm

Похоже cached_value, но почему-то в ней нет id properties.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: значения переменных класса

Сообщение directman66 » Чт апр 26, 2018 10:58 pm

В pvalues нет классовых свойств. Только свойства объекта.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
fandaymon
Сообщения: 1570
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: значения переменных класса

Сообщение fandaymon » Чт апр 26, 2018 11:09 pm

directman66 писал(а):
Чт апр 26, 2018 10:58 pm
В pvalues нет классовых свойств. Только свойства объекта.
Ну не знаю - глянул для примера датчик движения.
MotionSensor2.statusText - вполне себе классовое свойство... Хранится в pvalues. Правда вытаскивается и по oject_id...

Или тебя интересуют какие свойства есть у класса? Именно свойства, а не значения? Тогда надо смотреть таблицу properties и отбирать по ID класса

SELECT * FROM properties WHERE CLASS_ID=
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: значения переменных класса

Сообщение directman66 » Чт апр 26, 2018 11:15 pm

Почему-то не все свойства там. нет не одного классового например у меня.
Зато тут есть все

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

SELECT objects.ID nameid, objects.TITLE titlename, objects.DESCRIPTION descr, properties.TITLE tip, cached_values.DATAVALUE
FROM `objects`, `properties`, `cached_values`
WHERE objects.ID=properties.OBJECT_ID and objects.class_id = (SELECT ID FROM `classes` WHERE title='starline-online') 
and cached_values.KEYWORD = 'MJD:'||properties.TITLE
а тут только те, что нет у класса

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

SELECT objects.ID nameid, objects.TITLE titlename, objects.DESCRIPTION descr, properties.TITLE tip, pvalues.VALUE
FROM `objects`, `properties`, `pvalues`
 WHERE objects.ID=properties.OBJECT_ID and objects.class_id = (SELECT ID FROM `classes` WHERE title='starline-online') 
and properties.ID=pvalues.PROPERTY_ID
Т.е. если их сравнить, то количество пропертисов у одного объекта сильно разнится.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
fandaymon
Сообщения: 1570
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: значения переменных класса

Сообщение fandaymon » Чт апр 26, 2018 11:20 pm

directman66 писал(а):
Чт апр 26, 2018 11:15 pm
Почему-то не все свойства там. нет не одного классового например у меня.
Зато тут есть все

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

SELECT objects.ID nameid, objects.TITLE titlename, objects.DESCRIPTION descr, properties.TITLE tip, cached_values.DATAVALUE
FROM `objects`, `properties`, `cached_values`
WHERE objects.ID=properties.OBJECT_ID and objects.class_id = (SELECT ID FROM `classes` WHERE title='starline-online') 
and cached_values.KEYWORD = 'MJD:'||properties.TITLE
а тут только те, что нет у класса

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

SELECT objects.ID nameid, objects.TITLE titlename, objects.DESCRIPTION descr, properties.TITLE tip, pvalues.VALUE
FROM `objects`, `properties`, `pvalues`
 WHERE objects.ID=properties.OBJECT_ID and objects.class_id = (SELECT ID FROM `classes` WHERE title='starline-online') 
and properties.ID=pvalues.PROPERTY_ID
Возможно просто ещё не успело в основную таблицу попасть
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: значения переменных класса

Сообщение directman66 » Чт апр 26, 2018 11:22 pm

Это как это? Редактор классов (где свойства объекта) с каким набором данных работает? Смотрел код плагина classes, но так до меня и не дошло.

С этим запросом база почему-то уходит в себя.

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

SELECT objects.ID nameid, objects.TITLE titlename, objects.DESCRIPTION descr, properties.TITLE tip, cached_values.DATAVALUE
FROM `objects`, `properties`, `cached_values`
WHERE objects.ID=properties.OBJECT_ID and objects.class_id = (SELECT ID FROM `classes` WHERE title='starline-online') 
and cached_values.KEYWORD = 'MJD:'||properties.TITLE
если убрать последнюю склейку 'MJD:'||properties.TITLE, то запрос отрабатывает на ура. Как mySQL склеиваются строки?

Похожу тут через CONCAT. Эх, как быстро к ораклу привыкаешь )
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: значения переменных класса

Сообщение directman66 » Чт апр 26, 2018 11:49 pm

После перезагрузки похоже почистилась cached_value. Значит эта таблица нам не подходит.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
fandaymon
Сообщения: 1570
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: значения переменных класса

Сообщение fandaymon » Чт апр 26, 2018 11:57 pm

А чего бы просто не сделать свою таблицу с нужными параметрами? Зачем весь этот сыр-бор?
Ответить