Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Данные для колонки типа SET из запроса. Можно ли? / 17 сообщений из 17, страница 1 из 1
04.06.2014, 14:28:36
    #38661466
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
Подскажите,

1. Есть table1 (col1, col2, col3). В нее (периодически) добавляются новые колонки col4, col5, ... coln.
2. Есть table2 c column1, которая имеет тип SET, и column1 должна иметь список всех колонок из table1.
3. Получить список колонок из table1 я могу запросом.
А вот как мне при изменении списка колонок в table1 автоматом их подтянуть в table2.column1 и установить в качестве возможных значений? Можно ли так вообще?

Спасибо!
...
Рейтинг: 0 / 0
04.06.2014, 20:07:59
    #38661926
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
Нашел такой способ:

#1. Получаем названия всех столбцов из таблицы table1, и преобразуем в строку через , с помощью GROUP_CONCAT.
SELECT GROUP_CONCAT(DISTINCT COLUMN_NAME ORDER BY ORDINAL_POSITION) INTO @str
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'table1'
AND ORDINAL_POSITION BETWEEN 4 AND 100;

#2. Выполняем запрос, подставляя в SET() скопированную строку.
ALTER TABLE banks_settings MODIFY divide_100 SET( @str );


Можно создать процедуру, и выполнять ее.
Но здесь 1 проблемка: в SET( @str ) не хочет интерпретировать переменную в строку.

Как же быть?
...
Рейтинг: 0 / 0
04.06.2014, 20:12:49
    #38661931
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
sienegerНо здесь 1 проблемка: в SET( @str ) не хочет интерпретировать переменную в строку.Либо выполняйте эту интерпретацию на клиентском языке (например, php), либо используйте Prepared Statements .
...
Рейтинг: 0 / 0
04.06.2014, 22:19:29
    #38661975
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
sienegerПодскажите,

1. Есть table1 (col1, col2, col3). В нее (периодически) добавляются новые колонки col4, col5, ... coln.
2. Есть table2 c column1, которая имеет тип SET, и column1 должна иметь список всех колонок из table1.
3. Получить список колонок из table1 я могу запросом.
А вот как мне при изменении списка колонок в table1 автоматом их подтянуть в table2.column1 и установить в качестве возможных значений? Можно ли так вообще?

Спасибо!Если добавляемые колонки называются Май2014, Июнь2014, Июль2014 и т.д., то канделябером вам по роже, а не пичку нести!

А другой вариант для такого изврата мне и придумать сложно... Может, поделитесь?
...
Рейтинг: 0 / 0
05.06.2014, 00:05:32
    #38662037
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
никому это не напоминает задачу постом ниже... про добавление колонок периодически... похоже мы решаем туже делему только теперь новым путём.
...
Рейтинг: 0 / 0
05.06.2014, 15:55:35
    #38662732
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
Cygapb-007Если добавляемые колонки называются Май2014, Июнь2014, Июль2014 и т.д., то канделябером вам по роже, а не пичку нести!

А другой вариант для такого изврата мне и придумать сложно... Может, поделитесь?
Таблица купли-продажи курсов валют.
bank_name, usd_buy, usd_sell, eur_buy, eur_sell, .... Если добавляю какую-то новую валюту - то добавляю новые 2 столбца newcode_buy, newcode_sell
...
Рейтинг: 0 / 0
05.06.2014, 15:57:52
    #38662735
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
[quot miksoft]sieneger либо используйте Prepared Statements .
Спасибо. Попробую - отпишусь.
...
Рейтинг: 0 / 0
05.06.2014, 16:42:58
    #38662775
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
sienegerЕсли добавляю какую-то новую валюту - то добавляю новые 2 столбца newcode_buy, newcode_sell
Cygapb-007канделябером вам по роже
...
Рейтинг: 0 / 0
05.06.2014, 18:59:34
    #38662906
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
On 04.06.2014 15:28, sieneger wrote:

> *1.* Есть table1 (col1, col2, col3). В нее (периодически) добавляются
> новые _колонки_ col4, col5, ... coln.
> *2.* Есть table2 c column1, которая имеет тип SET, и column1 должна
> иметь список всех колонок из table1.
> *3.* Получить список колонок из table1 я могу запросом.
> А вот как мне при изменении списка колонок в table1 автоматом их
> подтянуть в table2.column1 и установить в качестве возможных значений?
> Можно ли так вообще?


Мужчина, ты про проектирование реляционных БД что-то прочитай, про формы
нормальные, и т.п.

Пункт 1 у тебя -- уже криминал, которого не должно быть в РБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.06.2014, 20:05:48
    #38664103
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
MasterZivМужчина, ты про проектирование реляционных БД что-то прочитай, про формы нормальные, и т.п.
Про проектирование читал, может конечно что-то не допонял.
MasterZivПункт 1 у тебя -- уже криминал, которого не должно быть в РБД.

Простите, а в чем именно криминал? Нельзя добавлять столбцы в таблицу, если появляются новые объекты окружающего мира, информацию о которых я собираю и она относится к главному объекту?
Какое было бы ваше решение в данной ситуации?
...
Рейтинг: 0 / 0
06.06.2014, 23:33:28
    #38664271
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
miksoftлибо используйте Prepared Statements .
Выполняю prepare:
PREPARE upd FROM "ALTER TABLE banks_settings MODIFY divide_100 SET(?)";

Пишет ошибку : Error Code: 1064. You have an error in your SQL syntax;

В мануале написано, что ALTER в prepare использовать можно.
Использую MySQL 5.5.37-log.

Где-то ошибся?
...
Рейтинг: 0 / 0
06.06.2014, 23:46:52
    #38664280
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
sieneger,

А что за знак вопроса?
...
Рейтинг: 0 / 0
07.06.2014, 19:24:44
    #38664444
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
miksoftА что за знак вопроса?
Ну, знак вопроса - это место куда я хотел вставлять список SET, который мне нужно обновить в table2.

Получилось сделать такую процедуру с использованием PREPARE STMT:
Select ...[mydata] INTO @var FROM .....
SET @query := CONCAT('ALTER TABLE table2 MODIFY column1 SET(', @var , '), MODIFY column2 SET(', @var , '), MODIFY column3 SET(', @var , ')' );
PREPARE update_set FROM @query;
EXECUTE update_set;

Получилось только с помощью CONCAT() , поскольку выдает ошибку, если сразу вставлять подготовленную переменную со списком значений в тип SET. Странно как-то....

Теперь необходимо каждый раз запускать такую процедуру, когда добавляю новый столбец в table1.
Пытался выполнять ее через триггер, что было бы очень удобно. Но триггеры в MySQL не работают с процедурой, в которой есть подготовленные запросы . :-(

Miksoft , спасибо за наводку с Prepared Statement, до этого ими не пользовался.
...
Рейтинг: 0 / 0
08.06.2014, 07:23:44
    #38664560
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
правильнее для такой задачи использовать дереья. тогда не потребуется добавлять колонки.
...
Рейтинг: 0 / 0
08.06.2014, 09:32:55
    #38664567
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
sieneger,

посмотрите в сторону EAV, например, сюда , или в гугл.
Вероятно, вам это подойдет лучше всего
...
Рейтинг: 0 / 0
09.06.2014, 14:08:41
    #38665320
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
On 06.06.2014 21:05, sieneger wrote:

> Про проектирование читал, может конечно что-то не допонял.
> MasterZiv
> Пункт 1 у тебя -- уже криминал, которого не должно быть в РБД.
>
>
> Простите, а в чем именно криминал? Нельзя добавлять столбцы в таблицу,
> если появляются новые объекты окружающего мира, информацию о которых я
> собираю и она относится к главному объекту?


Именно.

В БД набор полей таблиц не должен расширяться (или удаляться).
Это возможно только если ты меняешь приложение и добавляешь новый
функционал.

ТАкже нельзя ссылаться на поля таблиц по именам из каких-то других данных.

/По пунктам :
1. Есть table1 (col1, col2, col3). В нее (периодически) добавляются
новые колонки col4, col5, ... coln.


Криминал. НЕ должно такого быть.


2. Есть table2 c column1, которая имеет тип SET, и column1 должна иметь
список всех колонок из table1.

Тоже криминал.


3. Получить список колонок из table1 я могу запросом.
А вот как мне при изменении списка колонок в table1 автоматом их
подтянуть в table2.column1 и установить в качестве возможных значений?
Можно ли так вообще?

Ну а это -- производная.


Ещё как-то можно такое делать, когда делаешь редактируемые пользователем
составители запросов.

> Какое было бы ваше решение в данной ситуации?

Ээээ...

я не знаю твою задачу, поэтому решение не могу даже угадать.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.06.2014, 10:18:49
    #38665991
sieneger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Данные для колонки типа SET из запроса. Можно ли?
MasterZiv,
Спасибо! Пока на большее знаний не хватает. Буду дальше читать про проектирование БД и NF.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Данные для колонки типа SET из запроса. Можно ли? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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