Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UPDATE по списку таблиц 
:(
    Опции темы
bloodnix
Дата 10.2.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Добрый день!

Задача состоит в следующем:

С помощью SQL запроса:

Код

        SELECT
        CONCAT('b_iblock_element_prop_s',fields_ids.IBLOCK_ID) AS TABLE_NAME,
        CONCAT('PROPERTY_',fields_ids.ID) AS FIELD, fields_ids.CODE, fields_ids.IBLOCK_ID  FROM
        (
            SELECT ID,IBLOCK_ID,CODE FROM
            (
                SELECT *
                FROM `b_iblock_property`
                WHERE IBLOCK_ID
                IN
                (
                    SELECT ID
                    FROM `b_iblock`
                    WHERE `IBLOCK_TYPE_ID` = 'personal'
                )
            ) as tmp_fields WHERE `CODE`='USER_ID'  OR `CODE`='GUEST_ID'
        ) AS fields_ids WHERE 1 ORDER BY IBLOCK_ID;


я получаю данные (в скрине).

Скрин: user posted image


Необходимо проапдейтить все таблицы находящиеся в столбце TABLE_NAME, выставить им значение находящиеся в столбце FIELD(при условии что CODE=USER_ID), по условию когда столбец FIELD(при условии CODE=GUEST_ID) равен 3.
Например, для первой таблицы должен получится такой запрос:
Код

UPDATE b_iblock_element_prop_s51 SET `PROPERTY_334`=5 WHERE `PROPERTY_333`=3



Такое вообще возможно? или я неправильно построил первый запрос? (сделать нужно обязательно на SQL)
PM MAIL   Вверх
Akina
Дата 10.2.2011, 20:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Необходимость такой операции заставляет думать, что Вы изначально неверно спроектировали базу.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bloodnix
Дата 10.2.2011, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



увы ее проектировал не я, а компания 1С-Битрикс, к тому же они весьма бездарно написали методы APi для работы с информационными блоками размещенными в БД, так что при большом количестве элементов(порядка 20-30 млн.), жоется по 200 метров памяти и неизвестно сколько выполняется запрос... чтобы немного облегчить участь многострадального битрикса, самую нагруженную часть работы с Бд я решил вынести в триггеры. 
PM MAIL   Вверх
Akina
Дата 10.2.2011, 23:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0881 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.