INSERT если записи с таким именем не существует

Bodyau

Новичок
Здравствуйте,очень нужна помощь.Есть вставка массива
foreach ($a as $b=> $c){
$this->db->query("INSERT INTO table SET name= '".$c['name'].'");
}
нужно сделать условие,что бы вставлялись записи только те, которые не существуют уже в таблице
и обновлять ничего не нужно только INSERT
Спасибо
 

Breeze

goshogun
Команда форума
Партнер клуба
простое решение для mysql
insert ignore + unique index на name

для остальных смотреть на наличие upsert
 

Bodyau

Новичок
простое решение для mysql
insert ignore + unique index на name

для остальных смотреть на наличие upsert
Извиняюсь, не упомянул сразу, таблица стандартная , и уникальным какой то столбец я не могу и там есть AUTO_INCREMENT,поэтому игнор и уникальность не пойдет.
upsert ,я ж говорил что не хочу обновлять,а как я понял это более для счетчиков UPdate+inSERT
 

Breeze

goshogun
Команда форума
Партнер клуба
primary key + auto_increment не одно и то же с unique key, который есть самостоятельный тип индекса, не зависящий от pk и auto_increment

upsert ,я ж говорил что не хочу обновлять
ты слишком просто воспринимаешь этот механизм.
в PostgreSQL, например, возможна конструкция INSERT INTO ... ON CONFLICT DO NOTHING
легионы их.

В конце концов можно использовать нечто подобное
INSERT INTO table (id, name) SELECT NULL, 'value' WHERE NOT EXISTS ( SELECT 1 FROM table t WHERE t.name = 'value' );

Только в этом случае нужен индекс по name и желательно уникальный, но тогда незачем городить огород с вложенными запросами.
 

Bodyau

Новичок
primary key + auto_increment не одно и то же с unique key, который есть самостоятельный тип индекса, не зависящий от pk и auto_increment
Я знаю что они не зависят, я хочу сказать этим "стандартная" мне нельзя менять её,она как есть так и будет.
ты слишком просто воспринимаешь этот механизм.
в PostgreSQL, например, возможна конструкция INSERT INTO ... ON CONFLICT DO NOTHING
легионы их.
с этим БД не работал,мне нужно именно mysql

В конце концов можно использовать нечто подобное
INSERT INTO table (id, name) SELECT NULL, 'value' WHERE NOT EXISTS ( SELECT 1 FROM table t WHERE t.name = 'value' );

Только в этом случае нужен индекс по name и желательно уникальный, но тогда незачем городить огород с вложенными запросами.
Опять же уникальности у меня нет
 

Breeze

goshogun
Команда форума
Партнер клуба
пробуй тогда запрос по типу вышеуказанного, работать будет неоптимально на большой таблице
 

Bodyau

Новичок
нужно сделать условие,что бы вставлялись записи только те, которые не существуют уже в таблице
допустим есть запись id=AI,name=bogdan,id_cat= id45,(почему "id45" а не "45" потому что так заточен движок )идем дальше.Я хочу что бы при записи моего массива он проверил есть ли name=bogdan и id_cat=id45 если нет тогда вставить запись с таким айди и именнем если есть тогда вставить все кроме существующих.
 
Последнее редактирование:

Breeze

goshogun
Команда форума
Партнер клуба
Когда цитируешь, стоит это делать точнее, не нужно приписывать мне твои слова.
Вот и адапитруй свои условия к тому запросу, который я дал.
 
Сверху