2014-09-13 2 views
0

В моем коде я есть этот запрос:В одном запросе INSERT и ДУБЛИРУЙТЕ и сделали свою работу

$this->mysqli->query(
    INSERT INTO `address` SET 
    `name` = '$street', `created_at` = '$timestamp' 
    ON DUPLICATE KEY UPDATE 
    `updated_at` = '$timestamp'"); 

Но когда программа получить такое же значение имени имя он вставить новую строку, и обновлять старые в то же время. Я сделал ADD INDEX(name); Но все же я получаю повторяющиеся значения, которые я не хочу.

Я пробовал с подготовкой инструкции и обязательным параметром, но то же самое.

ответ

0

Вы можете установить уникальный индекс для поля (ы) в таблице и отправить запрос, как это:

REPLACE INTO tablename (a,b,c,d) VALUES (?,?,?,?); 
+0

Проблема в том, что мне нужны created_at и updated_at, поэтому, когда я заменяю строку, created_at теряется. –

+0

'ALTER TABLE tablename ADD UNIQUE (created_at, updated_at);' – Deep

1

Вам нужно добавить уникальный ключ для имени. Вместо того чтобы делать:

create index idx_address_name on address(name); 

Понадобится:

create unique index idx_address_name on address(name); 

Вы можете объявить уникальное ограничение другими способами, а также, например, используя ключевое слово unique в create table или alter table заявление.

С этим ваш код должен работать так, как вы ожидаете.

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