Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Инициализация пользовательских констант / 25 сообщений из 28, страница 1 из 2
05.09.2014, 14:18:49
    #38738670
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Добрый день!
В табличке хранятся имена переменных и их значение. Например:

Столбец: sys_name содержит '@filial_id '
Столбец: sys_val содержит 100

Надо присвоить значению поля sys_name значение поля sys_val,
т.е. фактически получить SET @filial_id = 100;

Макроподстановок в MySql я так полагаю нет?

Заранее спасибо.
...
Рейтинг: 0 / 0
05.09.2014, 14:59:18
    #38738741
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Есть prepared statements, но у них есть свои ограничения.
Можно ли в них сделать SET @filial_id = 100; - не помню. Посмотрите в доке.
...
Рейтинг: 0 / 0
05.09.2014, 15:01:41
    #38738746
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Можно, причём как явно, так и через параметры.
...
Рейтинг: 0 / 0
05.09.2014, 15:08:09
    #38738749
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
AkinaМожно, причём как явно, так и через параметры.а как через параметры передать имя переменной?
...
Рейтинг: 0 / 0
05.09.2014, 15:23:39
    #38738761
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
prepared statements по моему несколько не то...
Внятного рецепта пока не нашел.
...
Рейтинг: 0 / 0
05.09.2014, 15:24:13
    #38738762
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
давайте сначала зададимся вопросом - а зачем?

зачем такое делать, хранить имя переменных и значений в таблице, а потом делать такие
переменные и присваивать им значения.
...
Рейтинг: 0 / 0
05.09.2014, 15:34:46
    #38738778
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
В табличке я храню пользовательские настройки.
(ФИО директора, бухгалтера,текущий филиал, период просмотра и т.д)
Порядка 20 штук. Часть из них глобальные, скажем, фио директора. Часть локальные для конкретного юзера.
Юзер цепляется к базе, по его user_id считываются переменные.

По моему, все логично.
...
Рейтинг: 0 / 0
05.09.2014, 15:43:42
    #38738792
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Я бы это хранил либо в самой программе, либо в нужных запросах подклеивал эту табличку с настройками. В зависимости от их логики.
...
Рейтинг: 0 / 0
05.09.2014, 16:20:10
    #38738841
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miv32В табличке я храню пользовательские настройки.
(ФИО директора, бухгалтера,текущий филиал, период просмотра и т.д)
Порядка 20 штук. Часть из них глобальные, скажем, фио директора. Часть локальные для конкретного юзера.
Юзер цепляется к базе, по его user_id считываются переменные.

По моему, все логично.Ни хрена не логично.
Настройки - это атрибуты. Глобальные - формально независимые атрибуты, но лучше считать их атрибутами "дефолтного" пользователя, индивидуальные - атрибуты авторизованного пользователя. Причём индивидуальные имеют более высокий приоритет... но не это главное. Главное - что все атрибуты одной группы (неважно, конкретного пользователя или дефолтного) абсолютно равноправны, и никакой из них не является отдельной сущностью. Посему твоя схема хранения - неправильна. Следует хранить на каждого пользователя одну запись в таблице атрибутов с необходимым количеством полей.
...
Рейтинг: 0 / 0
05.09.2014, 17:12:16
    #38738900
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
автор Следует хранить на каждого пользователя одну запись в таблице атрибутов с необходимым количеством полей.
ну с этим тоже можно спорить.
я б предложил хранить в дереве. количество неограничено, у каждого может быть свой набор параметров,просто добавлять, просто удалять.
...
Рейтинг: 0 / 0
05.09.2014, 18:31:54
    #38738980
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
я вообще спрашивал

зачем понадобилось
имея
ТАБЛИЦА
name|value
a|10
b|20

SET @a = 10;
SET @b = 20;
???

это при какой задаче необходимость возникает?
...
Рейтинг: 0 / 0
05.09.2014, 21:33:13
    #38739092
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Если вкратце...
Есть контора, у нее куча филиалов, в каждом филиале куча юзеров.
За одни и те же компы в разное время садятся работать разные люди.
Естественно у каждого свой логин и пароль.
В зависимости от допуска, разные настройки.
Собственно в табличке эти настройки и лежат. Есть глобальные настройки, которые действуют для всех (Название организации, например) и есть локальные для каждого конкретного юзера. Т.е. независимо от того, где человек работает, он получает одну и ту же среду. Поставил новый комп, настроил коннект и клиентскую часть и вперед! :)

Собственно, так я работал с Ораклом. Для другой конторы Оракл не по карману, поэтому
MySql (даже не MySql, а MariaDb)

Оракловый синтаксис отличается, хотя и не столь уж радикально, но MySql пока дает прикурить.

Поэтому одна таблица с параметрами ВСЕХ юзеров, но при логине идет сначала запрос в идентификационную табличку, оттуда дергается user_id и потом уже идет на курсор по
SELECT таблицы параметров для конкретного юзера. Ну и т.д.

У вас как-то по другому?
...
Рейтинг: 0 / 0
05.09.2014, 22:26:45
    #38739106
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miv32У вас как-то по другому?У нас у каждого пользователя своя схема и в каждой из них идентичные таблицы со своими настройками. (У нас боевая база в Оракле, но на концепцию это не влияет).
...
Рейтинг: 0 / 0
05.09.2014, 22:54:55
    #38739121
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Спорить о преимуществах того или иного способа можно до бесконечности.
Скажем, на всех юзеров у нас на работе под Оракл схем не напасешься. :)
Иначе админ только и будет по десятку схем дропать и создавать каждый день.

Вопрос однако остался открытым...
Будем искать с перламутровыми пуговицами. :)
...
Рейтинг: 0 / 0
05.09.2014, 23:03:07
    #38739124
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miv32Спорить о преимуществах того или иного способа можно до бесконечности.
Скажем, на всех юзеров у нас на работе под Оракл схем не напасешься. :)
Иначе админ только и будет по десятку схем дропать и создавать каждый день.Да и не спорю, просто ответил на вопрос "У вас как-то по другому?".

У нас используются оракловые пользователи, а в оракле (обычных) пользователей без схемы все равно не бывает. И процессы создания/удаления автоматизированы, админов никак не касаются.
miv32Вопрос однако остался открытым...prepared statements не подошли?
Тогда, наверное, остается только городить CASE-ы.
...
Рейтинг: 0 / 0
06.09.2014, 07:10:31
    #38739208
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
автор SET @filial_id = 100;
а где это требуется получить? где это используется?
в хранимке?
...
Рейтинг: 0 / 0
06.09.2014, 07:54:44
    #38739211
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miv32,

во-первых, изначально имеется EAV.
Спорить и навязывать ТС другие виды хранения
информации -- бесполезно. Всему свое время и место

во-вторых, имеется недопонимания публики
как ТС собирается использовать эти переменые.
Возможно ТС путается перенести оракловские
штучки-дручки в другую базу.

Для справки -- кастомизация енваеремента под
залогиненого юзера обычно делается на ворк-флоу
уровне. Для веб аппликаций это обычно веб сервер
или в других случаях апликейшн сервер.
Кастомизация датабазной сессии -- было такое
на Оракле где как-то писали всю(!) логику на пл/скл-е.
Для мускл-а это -- как мне кажется -- большая редкость.

КОроче, просоединяюсь к предыдушему орателю:

авторавтор
SET @filial_id = 100;

а где это требуется получить? где это используется?
в хранимке?
...
Рейтинг: 0 / 0
06.09.2014, 17:31:43
    #38739356
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
Ясно, спасибо всем:).
...
Рейтинг: 0 / 0
06.09.2014, 19:08:56
    #38739402
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miv32,

да незачто!
...
Рейтинг: 0 / 0
07.09.2014, 16:15:38
    #38739816
miv32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
В общем-то поборол. Вдруг кому понадобится.
Может оно и как академический интерес, но выглядит вот так:

Код: sql
1.
2.
3.
4.
...............
         SET @c_concat_str = CONCAT('SET ',c_sys_name,'=',c_sys_val);
         PREPARE result_concat FROM @c_concat_str;
         EXECUTE result_concat;



где c_sys_name и c_sys_val сфетченные значения sys_name и sys_val соответственно.
Разумеется, переменные должны быть описаны в Declare
...
Рейтинг: 0 / 0
07.09.2014, 17:04:44
    #38739831
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miv32В общем-то поборол. Вдруг кому понадобится.
Может оно и как академический интерес, но выглядит вот так:

Код: sql
1.
2.
3.
4.
...............
         SET @c_concat_str = CONCAT('SET ',c_sys_name,'=',c_sys_val);
         PREPARE result_concat FROM @c_concat_str;
         EXECUTE result_concat;



где c_sys_name и c_sys_val сфетченные значения sys_name и sys_val соответственно.
Разумеется, переменные должны быть описаны в Declare
для чего это применяется?
...
Рейтинг: 0 / 0
07.09.2014, 17:49:52
    #38739845
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
вадя....
для чего это применяется?


сие есть тайна великая, автор -- агент КГБ в
отделе ЦРУ который анализирует работу КГБ по обнаружению
агентов ЦРУ работаюших на КГБ.
...
Рейтинг: 0 / 0
07.09.2014, 19:06:19
    #38739881
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
ну тогда фантазии на тему : где и как это можно использовать?
может и мне сгодится...
применение PREPARE оригинальное, но для чего????
мозги кипят...
...
Рейтинг: 0 / 0
07.09.2014, 19:08:05
    #38739882
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
вадяно для чего????Чтобы установить переменные сессии, что тут непонятного?
Почему именно сессии, а не приложения - вероятно, так построено приложение.
...
Рейтинг: 0 / 0
07.09.2014, 20:24:16
    #38739917
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инициализация пользовательских констант
miksoftвадяно для чего????Чтобы установить переменные сессии, что тут непонятного?
Почему именно сессии, а не приложения - вероятно, так построено приложение.


следуюший вопрос будет -- а куда они пропали при
следуюшем подключении... или , еще веселей,
почему при следуюшем подключении там чужие значения....
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Инициализация пользовательских констант / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]