MySQL Insert с условием

Тема в разделе "Базы данных", создана пользователем dig555, 17 сен 2012.

Модераторы: latteo
  1. dig555

    dig555

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

    Каким образом нужно модифицировать запрос на вставку данных:
    $sql = "INSERT INTO tbl_name SET `field`='".$value."', `phone`='".$phone." bla_bla_bla"
    чтобы в случае, если в базе уже есть запись со значением поля phone идентичное $phone - вставки не происходило.
     
  2. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    312
    поле phone - поставьте уникальное (unique), тогда и(судя по мануалам, Перейти по ссылке ) не будет производиться вставки (если не указано ключевое слово IGNORE
     
    dig555 нравится это.
  3. dig555

    dig555

    Регистр.:
    22 июн 2007
    Сообщения:
    362
    Симпатии:
    148
    В таком случае вставки не происходит, т.к. выдаётся ошибка Duplicate entry.
    А в случае подобной конструкции:
    PHP:
    $result mysql_query($sql)
        or die(
    "Invalid query: " mysql_error());
    как несложно догадаться вылетает весь скрипт.

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

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

     
    PapaJoe нравится это.
  4. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    312
    сейчас прочитал другие мануалы - да, случай с IGNORE и UNIQUE - как раз решение вашей проблемы
     
  5. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.407
    курим маны, триггер BEFORE INSERT
     
    latteo нравится это.
  6. Funaki

    Funaki

    Регистр.:
    26 июн 2008
    Сообщения:
    151
    Симпатии:
    16
    можно и так
    Код:
    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 запись
     
  7. antonyz

    antonyz Создатель

    Регистр.:
    10 мар 2010
    Сообщения:
    32
    Симпатии:
    1
    Вместо NOT EXISTS лучше использовать COUNT < 1