2013-12-09 3 views
17

Мне нужно вставить уникальные значения в таблицу и вам нужны идентификаторы записей, необходимо вставить их в таблицу отношений, нужен запрос для вставки записи если нет, верните идентификатор вставки, если существует, верните первичный ключ записи (id).mysql: вставить запись, если не существует else, вернуть идентификатор записи

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

схема:

------------ 
id | tag | 
------------ 
1 | orange| 
------------ 

я TrID это для одной записи

INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags 
WHERE NOT EXISTS (SELECT 1 FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1 

разместил вопрос, чтобы выяснить некоторые оптимизированное решение, я не хочу использовать дополнительные петли в коде для соответствия значениям из db.

+0

Пожалуйста, научитесь использовать кнопки форматирования кода в редакторе вопроса –

+0

спасибо, я буду заботиться о формировании –

+0

mysql имеет обновление или вставить в оператор 'tag' – Fallenreaper

ответ

0

Insert into a MySQL table or update if exists

это решить бы проблему? Я думаю, что это разрешит большинство ваших проблем, если вы переведете свой ответ в формат, который будет работать для вас.

+0

Я не хочу обновлять, мне нужен идентификатор для значения, если он существует –

+0

gotchya, дайте мне второй – Fallenreaper

+0

попробовал это, но ошибка запроса INSERT INTO теги ('tags') VALUES ('test') ON DUPLICATE KEY (выберите id из тегов, где tag = 'test') –

12

Существует пример на странице документации для INSERT ... ON DUPLICATE KEY UPDATE:

Ваш запрос будет выглядеть следующим образом:

INSERT INTO `tags` (`tag`) VALUES ('myvalue1') 
    ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), `tag`='myvalue1'; 
SELECT LAST_INSERT_ID(); 
0

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

Метод 1: ВЫБОР, а затем вставить Способ 2: попытаться {ВСТАВИТЬ} поймать {ВЫБРАТЬ} Метод 3: ВСТАВИТЬ IGNORE затем выбрать Метод 4: INSERT INTO ... ON DUPLICATE KEY UPDATE

http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/

+5

Ссылка Dead. 404 404 404 –

0

Вот это состояние MySQL вставить, если не существует, и возвращает идентификатор либо его новый ввод или старый

INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags 
WHERE NOT EXISTS (SELECT id FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1; 
select * from brand where `tag`='myvalue1' 
Смежные вопросы