Как использовать SQL, чтобы вставить что-то, если оно не существует, и удалить его, если оно существует? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь написать SQL-запрос на PHP, который создает новую строку, если эта строка уже не существует, и в этом случае удалите ее.

Я знаю, что могу выполнить это с помощью SELECT, посмотрите,он там, а затем выполните простое выражение if для запуска следующего запроса. Нет проблем. Тем не менее, я уверен, что есть способ сделать это с помощью одного запроса, и я хотел бы узнать.

У меня есть таблица с именем "people", которая имеет четыре столбца: ID (уникальный), Имя,Телефон, Дата. Моя программа добавляет имя и номер телефона, которые заполняются в моей таблице. Если я добавлю человека, который уже находится в системе, я хочу, чтобы он удалил информацию этого человека. Поскольку идентификатор назначается постепенно, а Дата - это просто отметка даты и времени, когда я добавляю информацию, я хочу проверить соответствие имени и телефона в качестве критерия, чтобы определить, является ли это уникальной записью.

ЭтоВСТАВИТЬ утверждение, которое я имею до сих пор:

$sql = "INSERT INTO people (ID, name, phone, date)";

Это работает. У меня также есть оператор, который использует SELECT, чтобы определить, есть ли строка, а затем запускает этот скрипт, если это не так. Это, вероятно, слишком сложно.

Я исследовал и нашел минимальную информацию об этом. (Так, может быть, есть лучший подход?) Я нашел некоторые ресурсы, такие как ВСТАВИТЬ новый, если он не существует, и ОБНОВЛЕНИЕ, если он , который не совсем отвечает на мой вопрос, потому что мне нужносравнить его с моими столбцами "имя" и "телефон", а не с уникальным идентификатором.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Я подозреваю, что вы хотите заменить строку, а не delete это. Вот один из методов:

insert into t (id, name, phone, date)
    values (id, name, phone, date)
    on duplicate key set id = values(id), date = values(date);

Предполагается, что (name, phone) имеет уникальный индекс или объявлен как первичный ключ:

create unique index unq_t_name_phone on t(name, phone);
0 голосов
/ 01 октября 2019

Вы можете вставить, только если не существует каких-либо данных, основанных на любом столбце

INSERT INTO table (ID, name, phone, date) 
  SELECT '', 'anything', 'anything', 'anydate' 
  FROM dual 
  WHERE NOT EXISTS
        ( SELECT name, phone
          FROM table
          WHERE name = '35.86' AND phone = 'phonenumberhere'
        ); 

Это похоже на выполнение другого оператора select, но оно мало выигрывает в производительности.

...