|
|
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
Подскажите, 1. Есть table1 (col1, col2, col3). В нее (периодически) добавляются новые колонки col4, col5, ... coln. 2. Есть table2 c column1, которая имеет тип SET, и column1 должна иметь список всех колонок из table1. 3. Получить список колонок из table1 я могу запросом. А вот как мне при изменении списка колонок в table1 автоматом их подтянуть в table2.column1 и установить в качестве возможных значений? Можно ли так вообще? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 14:28:36 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
Нашел такой способ: #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 ) не хочет интерпретировать переменную в строку. Как же быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 20:07:59 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
sienegerНо здесь 1 проблемка: в SET( @str ) не хочет интерпретировать переменную в строку.Либо выполняйте эту интерпретацию на клиентском языке (например, php), либо используйте Prepared Statements . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 20:12:49 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
sienegerПодскажите, 1. Есть table1 (col1, col2, col3). В нее (периодически) добавляются новые колонки col4, col5, ... coln. 2. Есть table2 c column1, которая имеет тип SET, и column1 должна иметь список всех колонок из table1. 3. Получить список колонок из table1 я могу запросом. А вот как мне при изменении списка колонок в table1 автоматом их подтянуть в table2.column1 и установить в качестве возможных значений? Можно ли так вообще? Спасибо!Если добавляемые колонки называются Май2014, Июнь2014, Июль2014 и т.д., то канделябером вам по роже, а не пичку нести! А другой вариант для такого изврата мне и придумать сложно... Может, поделитесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 22:19:29 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
никому это не напоминает задачу постом ниже... про добавление колонок периодически... похоже мы решаем туже делему только теперь новым путём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 00:05:32 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
Cygapb-007Если добавляемые колонки называются Май2014, Июнь2014, Июль2014 и т.д., то канделябером вам по роже, а не пичку нести! А другой вариант для такого изврата мне и придумать сложно... Может, поделитесь? Таблица купли-продажи курсов валют. bank_name, usd_buy, usd_sell, eur_buy, eur_sell, .... Если добавляю какую-то новую валюту - то добавляю новые 2 столбца newcode_buy, newcode_sell ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 15:55:35 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
[quot miksoft]sieneger либо используйте Prepared Statements . Спасибо. Попробую - отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 15:57:52 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
sienegerЕсли добавляю какую-то новую валюту - то добавляю новые 2 столбца newcode_buy, newcode_sell Cygapb-007канделябером вам по роже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 16:42:58 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 18:59:34 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
MasterZivМужчина, ты про проектирование реляционных БД что-то прочитай, про формы нормальные, и т.п. Про проектирование читал, может конечно что-то не допонял. MasterZivПункт 1 у тебя -- уже криминал, которого не должно быть в РБД. Простите, а в чем именно криминал? Нельзя добавлять столбцы в таблицу, если появляются новые объекты окружающего мира, информацию о которых я собираю и она относится к главному объекту? Какое было бы ваше решение в данной ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 20:05:48 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
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. Где-то ошибся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 23:33:28 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
sieneger, А что за знак вопроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 23:46:52 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
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, до этого ими не пользовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2014, 19:24:44 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
правильнее для такой задачи использовать дереья. тогда не потребуется добавлять колонки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 07:23:44 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
sieneger, посмотрите в сторону EAV, например, сюда , или в гугл. Вероятно, вам это подойдет лучше всего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 09:32:55 |
|
||
|
Данные для колонки типа SET из запроса. Можно ли?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:08:41 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=174&tid=1834699]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 423ms |

| 0 / 0 |
