Проверка перед INSERT и выбор ключа

CrazyOne

Новичок
Здравствуйте господа!

В MySQL я не силён, поэтому собственно и прошу у вас помощи.

В одной таблице tags, есть три поля: id, rustag, engtag. Все поля уникальны. Есть запрос, с помощью которого я добавляю данные:
PHP:
INSERT INTO tags (rustag, engtag) VALUES ('$rustag', '$engtag')
Всё бы хорошо, но у меня стала задача: появились параметры, например $param1, $param2. Мне необходимо проверить, существуют ли записи в полях rustag, engtag, которые соответствуют параметрам, грубо говоря проверить на наличие и если такие записи уже есть в таблице, нужно выбрать id этого поля и не добавлять новые.

Я конечно могу сделать несколько запросов SELECT, а потом INSERT...но логика подсказывает, что это решение не самое удачное. Идеальный вариант - это один, быстрый и максимально эффективный запрос.

Скажите пожалуйста, как лучше поступить в моей ситуации. Буду рад любому совету. Спасибо за внимание!
 

CrazyOne

Новичок
Немогли бы вы с запросом помочь? Везде в примерах указан ON DUPLICATE KEY UPDATE, а мне не нужен UPDATE, мне необходимо проигнорировать INSERT при совпадении и выбрать id в поле где совпало.

P.S. Я не id проверяю на дублирование а второе и третье поле.
 

С.

Продвинутый новичок
Хорошо, ну найдете запись с совпадющими тэгами, что с ней делать будете?
В этом случае тогда INSERT IGNORE

P.S. Не забудьте потом задать вопрос, как удалять ненужные тэги для данного ИД.
 

С.

Продвинутый новичок
DELETE FROM tags WHERE id=$id
INSERT INTO tags (...),(...),(...)

Просто, надежно, эффективно.
 

CrazyOne

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

C. вы пойдите поспите пару часов, может получится внимательно читать чужие сообщения.
 

Placido

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

fixxxer

К.О.
Партнер клуба
Я конечно могу сделать несколько запросов SELECT, а потом INSERT...но логика подсказывает, что это решение не самое удачное
нормальное решение, надо только учитывать что между селектами и инсертами мог вклиниться другой инсерт. Транзакции тут жирно, достаточно insert ignore и проверку affected rows
 

С.

Продвинутый новичок
Я в двух своих сообщениях написал что мне нужен id в результате, если найдено совпадение в других полях...
Вы хотите сказать, что для одной пары (rustag, engtag) всегда найдется не более одного id?
 

С.

Продвинутый новичок
То есть данный тэг к элементу с другим id уже использовать нельзя?
 
Сверху