Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: запарка с UPDATE  (Прочитано 12589 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 30-08-2005 10:38 » 

Чёй то я туплу уже с самого утра Жаль
Задача в общем такая :
Надо во время UPDATE сделать кое какие проверки и в соответствии с ними выполнить апдэйт.
Что то подобное (на это ругается Жаль все переменные с вопросиками впереди заменяются стринговыми значениями в одинарных кавычках ) :
Код:
UPDATE members_temp SET category = ?CategoryValue, url = ?CounterUrl,
IF ?Lang = 'LT' THEN info_lt = ?CounterDescription
ELSEIF ?Lang = 'RU' THEN info_ru = ?CounterDescription
ELSE info_en = ?CounterDescription
END IF
WHERE id = ?CounterID
AND id IN(SELECT counter_id FROM v2_account_counter WHERE account_id = ?UserID );
В общем что то похожее.
Т.е. в реале Мускул получает вот такого вида запрос
Код:
UPDATE members_temp SET category = 9, url = 'http://www.bla.lt',
IF 'LT' = 'LT' THEN info_lt = 'infolt'
ELSEIF 'LT' = 'RU' THEN info_ru = 'inforu'
ELSE info_en = 'infoen'
END IF
WHERE id = 34578
AND id IN(SELECT counter_id FROM v2_account_counter WHERE account_id = 9951 );
« Последнее редактирование: 04-12-2007 18:48 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
kroum
Интересующийся

ua
Offline Offline

« Ответ #1 : 30-08-2005 12:29 » 

А какая версия MySQL?
Вложенные запросы и условия в запросах появились совсем недавно (версия 4.4 или 4.5, как мне подсказали).
А в более ранних версиях нужно было играться с left join и right join. В Manual-е даже приводились примеры преобразования запроса типа select ... from.. where .. in (select...) к виду с использованием правых и левых объединений.
По крайней мере, в версии 3.45, с которой я работал, было именно так
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #2 : 30-08-2005 12:56 » 

Версия 4.1.11
С вложеными запросами всё ок. Проблему решил. Завёл две дополнительные переменные и пробежался ифом по всем нужным полям.
Вот :
Код:
UPDATE members_temp
SET category = ?CategoryValue, url = ?CounterUrl,
info_lt = IF(?CounterDescription_lt=null, info_lt, ?CounterDescription_lt),
info_ru = IF(?CounterDescription_ru=null, info_ru, ?CounterDescription_ru),
info_en = IF(?CounterDescription_en=null, info_lt, ?CounterDescription_en)
WHERE id = ?CounterID AND id IN(SELECT counter_id FROM v2_account_counter WHERE account_id = ?UserID );

Проблема решена Ага
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 30-08-2005 17:02 » 

kroum, откуда такие версии? Есть ветка 4.0, есть 4.1, а 4.4 и 4.5 нет. И версии 3.45 то же нет - возможно ты путаешь с 3.23.45 или с 4.0.45...
Вложенные запросы появились в 4.1.
JOIN возможен при выборке, а не при обновлении. В версиях 4.0 и ниже, в таких вот случаях, надо было выбирать требуемые значения в программу и состовлять из них запрос.

MOPO3, ты уж в следующий раз выкладывай текст ругательства Улыбаюсь
« Последнее редактирование: 30-08-2005 17:07 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 30-08-2005 17:14 » new

MOPO3, MySQL конструкцию IF ... THEN ... END IF не поддерживает. Для твоего случая есть CASE ... WHEN ... THEN ... END.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #5 : 31-08-2005 04:21 » 

MOPO3, ты уж в следующий раз выкладывай текст ругательства Улыбаюсь
Да ругательство стандартное Улыбаюсь Типа проверьте синтаксис возле IF Улыбаюсь

MOPO3, MySQL конструкцию IF ... THEN ... END IF не поддерживает. Для твоего случая есть CASE ... WHEN ... THEN ... END.
С CASE ... WHEN была таже байда, я пробовал Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 31-08-2005 06:23 » 

А приведи вариант с CASE, если он конечно сохранился - хотелось бы взглянуть.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #7 : 31-08-2005 06:36 » 

А приведи вариант с CASE, если он конечно сохранился - хотелось бы взглянуть.
К сожалению не сохранился, но был аналогичен тому что в моём первом посте с ифами.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines