powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Данные для колонки типа SET из запроса. Можно ли?
17 сообщений из 17, страница 1 из 1
Данные для колонки типа SET из запроса. Можно ли?
    #38661466
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите,

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

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

#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
Данные для колонки типа SET из запроса. Можно ли?
    #38661931
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sienegerНо здесь 1 проблемка: в SET( @str ) не хочет интерпретировать переменную в строку.Либо выполняйте эту интерпретацию на клиентском языке (например, php), либо используйте Prepared Statements .
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38661975
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Данные для колонки типа SET из запроса. Можно ли?
    #38662037
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никому это не напоминает задачу постом ниже... про добавление колонок периодически... похоже мы решаем туже делему только теперь новым путём.
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38662732
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007Если добавляемые колонки называются Май2014, Июнь2014, Июль2014 и т.д., то канделябером вам по роже, а не пичку нести!

А другой вариант для такого изврата мне и придумать сложно... Может, поделитесь?
Таблица купли-продажи курсов валют.
bank_name, usd_buy, usd_sell, eur_buy, eur_sell, .... Если добавляю какую-то новую валюту - то добавляю новые 2 столбца newcode_buy, newcode_sell
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38662735
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot miksoft]sieneger либо используйте Prepared Statements .
Спасибо. Попробую - отпишусь.
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38662775
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sienegerЕсли добавляю какую-то новую валюту - то добавляю новые 2 столбца newcode_buy, newcode_sell
Cygapb-007канделябером вам по роже
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38662906
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Данные для колонки типа SET из запроса. Можно ли?
    #38664103
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivМужчина, ты про проектирование реляционных БД что-то прочитай, про формы нормальные, и т.п.
Про проектирование читал, может конечно что-то не допонял.
MasterZivПункт 1 у тебя -- уже криминал, которого не должно быть в РБД.

Простите, а в чем именно криминал? Нельзя добавлять столбцы в таблицу, если появляются новые объекты окружающего мира, информацию о которых я собираю и она относится к главному объекту?
Какое было бы ваше решение в данной ситуации?
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38664271
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Данные для колонки типа SET из запроса. Можно ли?
    #38664280
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sieneger,

А что за знак вопроса?
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38664444
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Данные для колонки типа SET из запроса. Можно ли?
    #38664560
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильнее для такой задачи использовать дереья. тогда не потребуется добавлять колонки.
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38664567
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sieneger,

посмотрите в сторону EAV, например, сюда , или в гугл.
Вероятно, вам это подойдет лучше всего
...
Рейтинг: 0 / 0
Данные для колонки типа SET из запроса. Можно ли?
    #38665320
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Данные для колонки типа SET из запроса. Можно ли?
    #38665991
sieneger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
Спасибо! Пока на большее знаний не хватает. Буду дальше читать про проектирование БД и NF.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Данные для колонки типа SET из запроса. Можно ли?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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