Как проверить запись на существование и добавить ее в базу данных если ее там нет или отредактировать если она там есть? - MySQL

Узнай цену своей работы

Формулировка задачи:

INSERT INTO AdvancedAccess VALUES('BlackBurn','removed@mail.ru','3884e9a59a96c3969c3b18d3cea442c4','1','2018-05-31 15:08:09') WHERE ((SELECT COUNT(*) FROM AdvancedAccess WHERE (((Login = 'BlackBurn') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4') = 0) OR UPDATE AdvancedAccess SET Login = 'BlackBurn',Email = 'removed@mail.ru',ID = '3884e9a59a96c3969c3b18d3cea442c4',AdvOpenSource = '1',DateAccess = '2018-05-30 15:08:09' WHERE (((Login = 'BlackBurn') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4') UNION INSERT INTO AdvancedAccess VALUES('Login','removed@mail.ru','3884e9a59a96c3969c3b18d3cea442c4','1','2018-05-31 15:08:09') WHERE ((SELECT COUNT(*) FROM AdvancedAccess WHERE (((Login = 'Login') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4') = 0) OR UPDATE AdvancedAccess SET Login = 'Login',Email = 'removed@mail.ru',ID = '3884e9a59a96c3969c3b18d3cea442c4',AdvOpenSource = '1',DateAccess = '2018-05-31 15:08:09' WHERE ((Login = 'Login') OR (EMail = 'removed@mail.ru') AND ID = '3884e9a59a96c3969c3b18d3cea442c4')
вот что я изобрел на эту тему, но как сделать чтобы оно работало??? ща SQL выдает ошибку #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where ((SELECT count(*) FROM AdvancedAccess WHERE (((Login = 'BlackBurn') or (EM' at line 1 хотя запрос
(SELECT COUNT(*) FROM AdvancedAccess WHERE (((Login = 'BlackBurn') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4')
отдельно от всего остального выполняется нормально
Вернее вот так:
INSERT INTO AdvancedAccess VALUES('BlackBurn','removed@mail.ru','3884e9a59a96c3969c3b18d3cea442c4','1','2018-05-31 15:08:09') WHERE (SELECT COUNT(*) FROM AdvancedAccess WHERE (((Login = 'BlackBurn') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4') = 0) OR UPDATE AdvancedAccess SET Login = 'BlackBurn',Email = 'removed@mail.ru',ID = '3884e9a59a96c3969c3b18d3cea442c4',AdvOpenSource = '1',DateAccess = '2018-05-30 15:08:09' WHERE (((Login = 'BlackBurn') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4') UNION INSERT INTO AdvancedAccess VALUES('Login','removed@mail.ru','3884e9a59a96c3969c3b18d3cea442c4','1','2018-05-31 15:08:09') WHERE (SELECT COUNT(*) FROM AdvancedAccess WHERE (((Login = 'Login') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4') = 0) OR UPDATE AdvancedAccess SET Login = 'Login',Email = 'removed@mail.ru',ID = '3884e9a59a96c3969c3b18d3cea442c4',AdvOpenSource = '1',DateAccess = '2018-05-31 15:08:09' WHERE (((Login = 'Login') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4')
и вот так:
SELECT COUNT(*) FROM AdvancedAccess WHERE (((Login = 'BlackBurn') OR (EMail = 'removed@mail.ru')) AND ID = '3884e9a59a96c3969c3b18d3cea442c4')

Решение задачи: «Как проверить запись на существование и добавить ее в базу данных если ее там нет или отредактировать если она там есть?»

textual
Листинг программы
SELECT IIF ( (SELECT COUNT(*) FROM `USERS` WHERE (((Login = 'Login') OR (Email = 'test@mail.ru')) AND STATUS = 'ACTIVATED'))=1,
 (INSERT INTO AdvancedAccess  (Login,Email,ID,AdvOpenSource,DateAccess) VALUES ('Login','test@mail.ru','3884e9a59a96c3969c3b18d3cea442c4','2','2019-05-12 21:48:35')
 ON DUPLICATE KEY UPDATE Login  = VALUES(Login),Email  = VALUES(Email),ID = VALUES(ID),
AdvOpenSource  = VALUES(AdvOpenSource),DateAccess  = VALUES(DateAccess)), 'FALSE' ) AS RESULT;

Объяснение кода листинга программы

  1. Сначала выполняется запрос SELECT с функцией IIF. Функция IIF проверяет, равно ли количество записей в таблице USERS, удовлетворяющих условию (((Login = 'Login') OR (Email = 'test@mail.ru')) AND STATUS = 'ACTIVATED')), единице.
  2. Если условие в функции IIF выполняется, то выполняется оператор INSERT, который добавляет новую запись в таблицу AdvancedAccess со значениями 'Login', 'test@mail.ru', '3884e9a59a96c3969c3b18d3cea442c4', '2', '2019-05-12 21:48:35' для полей Login, Email, ID, AdvOpenSource и DateAccess соответственно.
  3. Если условие в функции IIF не выполняется, то оператор ON DUPLICATE KEY UPDATE не выполняется, и в таблицу AdvancedAccess ничего не добавляется или не обновляется.
  4. В конце запроса возвращается значение 'FALSE' в качестве результата.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы