2013-06-20 2 views
0

Как предотвратить вставки данных в базу данных, если данные существуют в базе данныхПредотвратить вставки данных в базу данных, если данные существуют

пример: У меня есть данные

for ($i = 1; $i <= 10; $i++) { 
    $text = "Orange"; 
    mysql_query("INSERT INTO fruit (text) VALUES ('$text')"); 
} 

Я хочу, чтобы текст «оранжевый» вставляются один раз в таблицу «фруктовой»
и если есть текст «Orange» снова его не вставлен в таблицу «фруктовой»
, потому что данные существуют, и были вставлены перед

+0

Почему вы не добавляете 'уникальное ограничение на столбец' на стороне db? – Rikesh

+2

Пожалуйста, для вашего же блага, не используйте устаревшее расширение 'mysql_ * '. Вместо этого переключитесь на 'mysqli_ *' или 'PDO' –

+0

Если ваши циклы увеличиваются, вы столкнетесь с серьезными проблемами с производительностью, если вы отправляете вставки по одному. Взгляните на следующий синтаксис: 'INSERT INTO tab (foo) VALUES ('bar'), ('baz'), ('meep')'.Таким образом, три строки создаются с одним утверждением. Разумеется, сумма является гибкой. – Joshua

ответ

0
for ($i = 1; $i <= 10; $i++) { 
$text = "Orange"; 
$result = mysql_query("SELECT text FROM fruit WHERE text = '$text'); 
    if (mysql_num_rows($result) == 0){ 
     mysql_query("INSERT INTO fruit (text) VALUES ('$text')"); 
    }else{ 
     echo "Duplicate"; 
     break; 
    } 
} 
+0

Это работа для меня, спасибо – opraz17

1

Использование INSERT IGNORE с уникальным ключом на текст.

INSERT IGNORE INTO fruit (text) VALUES ('$text') 
0

Пара способов:

  • Вы должны выполнить выберите первую и сравнить результаты, а затем делать вставки, если записи не найдены
  • Добавить уникальные для полей datbase и insers выиграл» т быть выполнено, если есть данные
  • Построить свой запрос, чтобы проверить перед вставкой
  • Использование Insert Игнорировать
1

Другой способ заключается в использовании:

REPLACE INTO fruit (text) VALUES ('$text') 

вставит новые и старые, удалять и вставлять снова :)
Но добавление уникального индекса текстового поля является лучшим способом: D

0

Большинство вещей в SQL, как и MySQL Unique Indexes, мы узнаем только один раз.
Решая ваш пример, мы должны запустить что-то около

CREATE TABLE IF NOT EXISTS `stackoverflow2`.`fruit` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    `text` VARCHAR(50) NOT NULL , 
    PRIMARY KEY (`id`) , 
    UNIQUE INDEX `text_UNIQUE` (`text` ASC)) 
ENGINE = InnoDB; 

С MySQL документ,

УНИКАЛЬНЫЙ индекс создает ограничение такое, что все значения в индексе должны быть различны. Произошла ошибка, если вы попытаетесь добавить новую строку с ключом , который соответствует существующей строке. Для всех двигателей индекс UNIQUE допускает множество значений NULL для столбцов, которые могут содержать NULL. [...]

Смежные вопросы