Автор Тема: SQL запрос для выгрузки тэгов товаров  (Прочитано 1051 раз)

27 Октябрь 2015, 12:36:40
  • Пользователь
  • **
  • Сообщений: 71
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день.
Понадобилось выгрузить теги товаров, т.к. при импорте старые теги затираются...

Есть вот такой удобный запрос:

SELECT p.id_product, p.active, pl.name, p.reference, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.wholesale_price, p.id_tax_rules_group, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product)
LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
LEFT JOIN ps_category c ON (cp.id_category = c.id_category)
LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product)
WHERE pl.id_lang = 1
AND cl.id_lang = 1
AND p.id_shop_default = 1
AND c.id_shop_default = 1
GROUP BY p.id_product

Что добавить сюда, чтобы появился столбец с тегами товаров?
27 Октябрь 2015, 14:09:24
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
pst.name AS tags
...
LEFT JOIN ps_tag pst ON (pst.id_tag = pt.id_tag)
27 Октябрь 2015, 16:32:33
Ответ #2
  • Пользователь
  • **
  • Сообщений: 71
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
pst.name AS tags
...
LEFT JOIN ps_tag pst ON (pst.id_tag = pt.id_tag)

огромное спасибо за ответ!
18 Ноябрь 2015, 15:03:51
Ответ #3
  • Пользователь
  • **
  • Сообщений: 71
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
pst.name AS tags
...
LEFT JOIN ps_tag pst ON (pst.id_tag = pt.id_tag)

Вот начал работать с тем, что выгрузил... Выводит по одному тегу. Как вывести все?
18 Ноябрь 2015, 16:02:48
Ответ #4
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если работаете через php файл, то сделать зароос в цикле.
18 Ноябрь 2015, 16:12:38
Ответ #5
  • Пользователь
  • **
  • Сообщений: 71
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если работаете через php файл, то сделать зароос в цикле.
Работаю просто через менеджер бд в престашопе.
в принципе эта выгрузка тегов не нужна часто, можно и в майадмине написать.
Вопрос в том, что я не знаю как пишется цикл и какие параметры изменять...
вот что у меня есть на данный момент - запрос:

SELECT p.id_product, p.active, pl.name, p.reference, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.wholesale_price, p.id_tax_rules_group, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default, pst.name AS tags
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product)
LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
LEFT JOIN ps_category c ON (cp.id_category = c.id_category)
LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product)
***
LEFT JOIN ps_tag pst ON (pst.id_tag = pt.id_tag)
***
WHERE pl.id_lang = 7
AND cl.id_lang = 7
AND p.id_shop_default = 1
AND c.id_shop_default = 1
GROUP BY p.id_product


Как я понимаю, цикл нужен здесь, где ***
18 Ноябрь 2015, 16:24:51
Ответ #6
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В запросе можно с  GROUP_CONCAT(pst.name ).
18 Ноябрь 2015, 17:12:31
Ответ #7
  • Пользователь
  • **
  • Сообщений: 71
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В запросе можно с  GROUP_CONCAT(pst.name ).

Благодарю за наводки :)

Вот, что работает у меня:
SELECT p.id_product, p.active, pl.name, p.reference, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.wholesale_price, p.id_tax_rules_group, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default, GROUP_CONCAT(pst.name) AS tags
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product)
LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
LEFT JOIN ps_category c ON (cp.id_category = c.id_category)
LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product)
LEFT JOIN ps_tag pst ON (pst.id_tag = pt.id_tag)
WHERE pl.id_lang = 7
AND cl.id_lang = 7
AND p.id_shop_default = 1
AND c.id_shop_default = 1
GROUP BY p.id_product