MySQL Insert с условием

dig555

Постоялец
Регистрация
22 Июн 2007
Сообщения
365
Реакции
160
Есть таблица tbl_name.
В ней среди прочих есть поля aid (уникальное, auto_increment) и phone.

Каким образом нужно модифицировать запрос на вставку данных:
$sql = "INSERT INTO tbl_name SET `field`='".$value."', `phone`='".$phone." bla_bla_bla"
чтобы в случае, если в базе уже есть запись со значением поля phone идентичное $phone - вставки не происходило.
 
поле phone - поставьте уникальное (unique), тогда и(судя по мануалам, Для просмотра ссылки Войди или Зарегистрируйся ) не будет производиться вставки (если не указано ключевое слово IGNORE
 
поле phone - поставьте уникальное (unique), тогда и(судя по мануалам, Для просмотра ссылки Войди или Зарегистрируйся ) не будет производиться вставки (если не указано ключевое слово IGNORE
В таком случае вставки не происходит, т.к. выдаётся ошибка Duplicate entry.
А в случае подобной конструкции:
PHP:
$result = mysql_query($sql)
    or die("Invalid query: " . mysql_error());
как несложно догадаться вылетает весь скрипт.

Мне бы запрос, который, допустим выберет все значения поля phone равные указанному, и в случае если количество результатов выборки равно нулю - выполнит INSERT.

А вот с IGNORE судя по всему будет работать.

Зачастую при добавление в таблицу, имеющей UNIQUE индекс или PRIMARY KEY, новой строки, очень полезным бывает синтаксис INSERT IGNORE. Использование данного синтаксиса удобно в случае случайного дублирования ключа при вставке, то есть сама вставка не будет произведена, при этом не будет прекращено выполнение.
Обычный алгоритм:
1) проверить наличие строки в таблице по ключу (SELECT)
2) вставить строку в случае отсутствия дублирования ключа (INSERT)
// находим объект
$row = query('SELECT * FROM table WHERE id=1');
// если такого объекта нет, то вставляем новую запись
if (!$row) {
query('INSERT INTO table …');
}
Теперь напишем только один запрос INSERT IGNORE без участия php
query('INSERT IGNORE INTO table …') // вставка
Не нужно придумывать свои алгоритмы и писать лишний код – пусть за вас думает MySQL.
 
сейчас прочитал другие мануалы - да, случай с IGNORE и UNIQUE - как раз решение вашей проблемы
 
можно и так
Код:
INSERT INTO  `tbl_name` (`field`, `phone`)
select "VALUE" AS `field`, "bla_bla_bla" as `phone`
FROM `tbl_name2`
WHERE NOT EXISTS (SELECT NULL FROM `tbl_name` WHERE `tbl_name`.`phone` = "bla_bla_bla")
LIMIT 0,1
одним запросом,
где `tbl_name2` любая таблица, в т.ч. и `tbl_name` лишь бы была 1 запись
 
Вместо NOT EXISTS лучше использовать COUNT < 1
 
Назад
Сверху