2015-02-23 4 views
0

Возможно, это только я, но я не смог найти ответ на конкретную проблему, с которой я столкнулся. У меня есть функция, которая вставляет запись в мой db следующим образом:Вставьте только запись в формате MySQL, если она не существует.

function createOpdrachtInstance($opdracht, $bedrijf, $deelnemer) { 
    $db = dbConnection(); 
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 
      $query = "INSERT INTO opdrachten_deelnemers (`opdracht_id`,`bedrijf_id`,`deelnemer_id`,`flag`) VALUES (:opdracht_id,:bedrijf_id,:deelnemer_id,:flag)"; 
      $q = $db->prepare($query); 
      $q->execute(array(':opdracht_id'=>$opdracht, 
           ':bedrijf_id'=>$bedrijf, 
           ':deelnemer_id'=>$deelnemer, 
           ':flag'=>0)); 
} 

Работает нормально. Но если запись, которая является точно такой же allready, существует (все строки, кроме id), ее не следует вставлять. Я нашел, как это работает для 1 строки, но не как это работает для нескольких строк. Как я могу реализовать это в своей функции?

ответ

1
$query = "INSERT IGNORE INTO opdrachten_deelnemers (`opdracht_id`,`bedrijf_id`,`deelnemer_id`,`flag`) VALUES (:opdracht_id,:bedrijf_id,:deelnemer_id,:flag)"; 

Надеется, что это помогает

+0

Спасибо за ваш ответ. Но это, похоже, не работает. – aardnoot

+0

Вам также нужен индекс unqiue для всех 4 столбцов. – Mihai

+0

Сочетание трех должно быть уникальным. Кажется, это делает так, чтобы в другой записи не было значений, которые присутствуют в другой записи. – aardnoot

0

Я полагаю, вы имели в виде столбцов, а не строки «(все строки, кроме идентификатора)»? Если бы это был я, я бы использовал хранимую процедуру, в которой есть логический тест внутри, чтобы найти, существует ли запись с этими значениями. Если запись существует, больше ничего не добавляйте.