PHP MySQL Insert Query, который не будет вставлен, если он уже существует - PullRequest
0 голосов
/ 02 июля 2018

Я проводил некоторые исследования и, к сожалению, не нашел ничего, что мне удалось бы сделать, и я думаю, что это связано с непониманием конструкции MySQL в примерах, на которые я смотрел.

Я пытаюсь выполнить запрос вставки и проверить значения в 3 конкретных столбцах, чтобы убедиться, что они не существуют, а затем вставить, иначе ничего не делать.

Моя таблица довольно проста: id (int11), пользователь (varchar (45)), метка (varchar (255)), агент (varchar (255)), empid (varchar (10)).

Мой идентификатор - это мой Основной, с Автоинкрементом, и вот мой код, который у меня сейчас есть, который работает при вставке, но не имеет обработки дубликатов:

$i = 0;
foreach ($agents as $ag){
    $sql = mysql_query("INSERT INTO `pms_users` 
    (`id`,`user`,`label`,`agent`,`empid`)
     VALUES 
    (NULL, '$user','$group','$labels[$i]','$ag')");
    $i ++;
}

Три столбца, которые мне нужно проверить, это $ user, $ group и $ ag.

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Если у вас может быть только одна строка на комбинацию пользователя, метки и агента, вы должны определить их как уникальное ограничение:

ALTER TABLE pms_users ADD CONSTRAINT pms_users_unq UNIQUE (`user`, `label`, `agent`);

А затем позвольте базе данных выполнить тяжелую работу с оператором insert-ignore:

INSERT IGNORE INTO `pms_users`
(`user`, `label`, `agent`, `empid`)
VALUES ('some_user', 'some_label', 'some_agent', 123)
0 голосов
/ 02 июля 2018

Вы можете попробовать вставить запрос на дублирование ключа. Он проверяет дубликаты ключей. Если они существуют, MySQL обновляет запрос, если не существует, MySQL выполняет запрос вставки. Конечно, в вашей базе данных вы должны объявить уникальные ключи. Вот документация MySQL для этого случая https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

0 голосов
/ 02 июля 2018

Добавить уникальный индекс для (user, label, empid). Тогда база данных не позволит вам создавать дубликаты.

ALTER TABLE pms_users
ADD UNIQUE INDEX (user, label, empid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...