Условное удаление из базы данных MySQL - PullRequest
0 голосов
/ 08 января 2019

У меня есть список клиентов, содержащий несколько номеров. Разные клиенты могут делить эти числа между собой (один клиент может «одолжить» некоторые из своих номеров другому), но если «заемщик» будет удален, он должен вернуть эти числа.

Моя структура таблицы выглядит так:

id | client | range_num_up | range_num_down | ... | former

Я пытаюсь достичь вот что: - если присвоенные клиенту номера не имели прежних: удалите их из базы данных - иначе номера должны быть присвоены первому еще раз

Мне известны операторы SELECT IF в mySQL, но я не совсем уверен, как связать их вместе с одним запросом.

Я уже пробовал что-то вроде:

SELECT IF(former is NULL, '', former) former FROM numbers_pool WHERE id = 3

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

if reply == '' {
    DELETE THAT ENTRY
}
else {
    UPDATE THE NAME OF THE CLIENT WITH RECEIVED FORMER
}

Любые советы и помощь приветствуется.

@ редактировать

Если быть точным: я знаю, что вы можете УДАЛИТЬ, но это все еще не охватывает второй сценарий, в котором я хотел бы обновить эту запись. Поэтому я ищу решение с одним запросом.

1 Ответ

0 голосов
/ 08 января 2019

Вы не можете сделать и DELETE, и UPDATE в одном выражении - это разные типы запросов. Вы можете написать короткую подпрограмму (например, процедуру или функцию или просто подпрограмму в файле сценария, который вы загружаете и выполняете), который будет выполнять все необходимые операторы в одной операции.

Логика должна быть довольно простой:

Сначала проверьте значение former, используя SELECT, и считайте значение в переменную. Если вы получите значение, то выполните необходимые UPDATE. Если вы получите NULL, вместо этого сделайте DELETE. Вам не нужно полагаться на результат УДАЛЕНИЯ, чтобы решить, что делать с ОБНОВЛЕНИЕМ (или наоборот).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...