Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 22.05.2019, 18:43   #1
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Адрес: Старый Оскол
Сообщений: 189
Репутация: 28
По умолчанию IF THEN ELSE

Ув., коллеги. Помогите разобраться с синтаксисом MySQL IF THEN ELSE

Нужно сделать запрос с проверкой и изменение в таблице..
Задача следующая:

Код:

IF запись присутствует AND year = '2019',
THEN 
     UPDATE SET month= NULL
ELSE 
     INSERT INTO grafics SET (...,...,...)
END IF;

Я что-то не могу понять как правильно синтаксис писать с этим блин ветвлением.

Пробовал так:

Код:

with ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('IF COUNT(SELET id_report FROM grafics WHERE year = :year)>0');
      SQL.Add('THEN');

      SQL.Add('UPDATE grafics SET date_graf = NULL');
      SQL.Add('WHERE (id_report=:idrep) AND (year = :nalyear)');

      SQL.Add('ELSE');
      SQL.Add('INSERT INTO grafics SET id_report = :idreport, ');
      SQL.Add('year = :nal_year');
      SQL.Add('END IF');

      Parameters.ParamByName('year').Value := nal_year;
      Parameters.ParamByName('nal_year').Value := nal_year;
      Parameters.ParamByName('idrep').Value :=  QReports.FieldByName('id_reports').AsInteger;
    end;
    QReports.Next;

пробовал IFEXISTS - не получается
В некоторых источника пишут что нужно использовать в запросе BEGIN - END
Так ли это?
iskurt вне форума   Ответить с цитированием
Старый 22.05.2019, 19:09   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,400
Репутация: 5596
По умолчанию

я бы копал в сторону создания STORED function в MySQL (дока на IF) и
вызова её в Delphi:

либо полностью решал задачу в Delphi - через дополнительный запрос проверял условие и там выполнял либо UPDATE либо INSERT

p.s.

Цитата:
Сообщение от iskurt Посмотреть сообщение
SELET id_report FROM grafics
нет такого слова
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 22.05.2019, 19:26   #3
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Адрес: Старый Оскол
Сообщений: 189
Репутация: 28
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я бы копал в сторону создания STORED function в MySQL (дока на IF) и
вызова её в Delphi:

либо полностью решал задачу в Delphi - через дополнительный запрос проверял условие и там выполнял либо UPDATE либо INSERT

p.s.


нет такого слова
Сорян, очепятка
iskurt вне форума   Ответить с цитированием
Старый 22.05.2019, 19:33   #4
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Адрес: Старый Оскол
Сообщений: 189
Репутация: 28
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
либо полностью решал задачу в Delphi - через дополнительный запрос проверял условие и там выполнял либо UPDATE либо INSERT
Я уже тоже к этому склоняюсь. Спасибо
iskurt вне форума   Ответить с цитированием
Старый 22.05.2019, 22:03   #5
xxbesoxx
Профессионал
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Адрес: Грузия Рустави
Сообщений: 1,333
Репутация: 719
Отправить сообщение для xxbesoxx с помощью Yahoo
По умолчанию

здесь тоже хороши пример https://www.xaprb.com/blog/2006/02/2...date-in-mysql/
__________________
E_MAIL: rijgvina7@yahoo.com
xxbesoxx на форуме   Ответить с цитированием
Старый 22.05.2019, 22:33   #6
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Адрес: Старый Оскол
Сообщений: 189
Репутация: 28
По умолчанию

ON DUBLICATE работает с индексами, а у меня набор данных объединенных логикой AND. Но все равно спасибо!
iskurt вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


14:02.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru