Произвести поиск и добавить значение

Статус
В этой теме нельзя размещать новые ответы.

Ssendem

Хранитель порядка
Регистрация
28 Май 2010
Сообщения
418
Реакции
513
В БД полный ноль. Задача:
Есть короткое и полное описание товара, Надо по определенному слову в описании товара добавить определённый тег, т.е. ищем товар с описанием в котором есть слово "новогодние" и нашедшему товару добавляем тег "newyear".
Я посмотрел в БД - получается короткое и полное описание находятся в таблице ps_product_lang, список всех тегов в ps_tag, а назначаются определенные теги соответствующим товарам в ps_product_tag. Пошагово должно выглядеть так(наверное) :
1. Идёт запрос по нужным словам в таблицу ps_product_lang и в полях description и description_short ищет требуемое. Когда находит соответственно узнаёт id_product.
7k1tLQ3xs-h1X3cq0YmQME6WB_mQSG6OOpjeZMKXnrPR4kRIe4LBPQjVhCLgvfZMLaBOWC1_mw20fbvZmw9cJg%3D%3D

2. В ps_tag добавляет нужный тег(при этом надо чтобы не создавал дублей) и узнаёт id_tag созданного тега.
EA3usWKMcklJ5xu26eIR8hNzROCea7BK7iGU6YjJxw9jJ3DZuFjqkTO7AFF_S12o0cS2kw65yltiFQoA1XhvUA%3D%3D

3. В ps_product_tag создаёт строку с нужным id_product и требуемым id_tag.
ahYihMTrMmpPHPPN1A-N21wo6tOhbrZX588AoxCOR4zlB5AHNjUbjSS7UGBqlURx7dvcOqlbOzhlorsqF_El0g%3D%3D
 
Я учусь только, по этому без бекапа не запускай))
Сначала создаем тег нужный, отдельным запросом
INSERT INTO ps_tag (name) VALUES ('newyear'); //Если у тебя колонка id - auto_increment, если нет - тогда так: NSERT INTO ps_tag (id, name) VALUES (''максимальный айди + 1',newyear');
Затем, когда у тебя уже тег newyear с любым айди существует в колонке ps_tag то вот такой запрос:
Это добавит в ps_product_tag товары, в описаниях и кратких описаниях которых попадается слово "новогодние" и проставит им айди тега, имя которого "newyear";
INSERT INTO ps_product_tag (id_product,id_tag) VALUES((SELECT DISTINCT id_product FROM ps_tag WHERE description LIKE 'новогодние' OR description_short LIKE 'новогодние'),(SELECT id_tag FROM ps_tag WHERE name='newyear'));

Еще можешь в запросе заменить 'новогодние' на 'новогодн%' - тогда у тебя туда попадут и с текстом новогодний, новогодняя и т.п. склонения.
 
Данную задачу можно решить несколькими способами, но самым оптимальным будет использование выражения INSERT SELECT, в котором получить id продукта, а код тега подставлять вручную.
Допустим нужно прошерстить newyear который предварительно записан в таблице ps_tag {1;'newyear'} тогда запрос будет выглядеть следующим образом:
INSERT INTO ps_product_tag (id_product,id_tag) SELECT id_product, 1 FROM ps_product_lang WHERE description LIKE '%новогодние%' OR description_short LIKE '%новогодние%';
 
предыдущий пост не защищает от создания тагов-дублей. Для защиты в условие требуется добавить связь с таблицей продукт_таг q и описаний тагов qq (left join-om) c условием, что наименование тага=искомому тагу, и добавить в главное условие: q.id_tag is null
 
предыдущий пост не защищает от создания тагов-дублей. Для защиты в условие требуется добавить связь с таблицей продукт_таг q и описаний тагов qq (left join-om) c условием, что наименование тага=искомому тагу, и добавить в главное условие: q.id_tag is null
Кстати да хорошее дополнение, но в вопросе защиты от дублей, лучше будет отсечь такую вероятность на корню, добавив уникальный индекс на оба поля в таблице "ps_product_tag".
 
Тоже идея. Но, на мой взгляд, нужно учесть, что будет постоянно срабатывать исключение (ошибка:( "Дублирующее значение в уникальный ключ". И инсерт не будет выполняться совсем.
 
Тоже идея. Но, на мой взгляд, нужно учесть, что будет постоянно срабатывать исключение (ошибка:( "Дублирующее значение в уникальный ключ". И инсерт не будет выполняться совсем.
Решается через
INSERT IGNORE
 
Решается через
INSERT IGNORE
Либо как вариант можно добавить поле сортировки по тегам в таблицу "ps_product_tag" и с помощью конструкции "ON DUPLICATE KEY UPDATE" увеличивать это поле, дабы потом можно было сортировать товары по этим ключевикам :crazy:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху