Автор Тема: SQL запрос. Помощь в создании  (Прочитано 883 раз)

11 Июнь 2018, 16:16:58
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте. Возник очередной вопрос:Как правильно создать запрос в Менеджере SQL, чтобы вытащить из Престы:1. Один определенный товар со всеми данными, которые в него вносились (цена, наличие, количество, описания, теги, изображения и пр.)2. Все товары магазина, со всеми данными, которые в них вносились (цена, наличие, количество, описания, теги, изображения и пр.)
Спасибо!
11 Июнь 2018, 16:50:14
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, 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
<strong>AND p.id_shop_default = 1 AND c.id_shop_default = 1</strong>
GROUP BY p.id_product
11 Июнь 2018, 16:57:16
Ответ #2
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
tigran,Спасибо!Подскажи, насколько я понимаю, этим запросом вытягиваются все товары магазина, так?А как сделать запрос, чтобы в csv попал только один определенный товар?Возможно такое?
11 Июнь 2018, 17:43:43
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Нужно добавить
WHERE p.id_product = ...
11 Июнь 2018, 18:32:40
Ответ #4
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
 tigran,Подскажи, к какой таблице обращаться? pc_product?
11 Июнь 2018, 19:18:41
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В админке у товаров видно id. Список товаров откройте, первая колонка id.
13 Июнь 2018, 18:13:56
Ответ #6
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В админке у товаров видно id. Список товаров откройте, первая колонка id.


то ли тугодумость, то ли рукожопость
ввожу запрос:

SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, 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 p.id_product = 4549
WHERE pl.id_lang = 1
AND cl.id_lang = 1
<strong>AND p.id_shop_default = 1 AND c.id_shop_default = 1</strong>
GROUP BY p.id_product

таблица: pc_product

вылезают ошибки: 1. Когда используются большое количество таблиц, каждый атрибут должен быть связан с таблицей.
2. Ошибка.

Что не так сделал?
13 Июнь 2018, 20:17:39
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
WHERE p.id_product = 4549 AND pl.id_lang = 1
13 Июнь 2018, 23:34:00
Ответ #8
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
WHERE p.id_product = 4549 AND pl.id_lang = 1


все равно у меня как то не так  :-\


SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, 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 p.id_product = 4549 AND pl.id_lang = 1
AND cl.id_lang = 1
<strong>AND p.id_shop_default = 1 AND c.id_shop_default = 1</strong>
GROUP BY p.id_product
14 Июнь 2018, 11:55:33
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, 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 p.id_product = 4549 AND pl.id_lang = 1 AND p.id_shop_default = 1 ;
В phpmyadmin можете проверить. Запрос находит товар по ид. Меняя "p.id_product = 4549" можно получить любой товар.
14 Июнь 2018, 15:04:44
Ответ #10
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, 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 p.id_product = 4549 AND pl.id_lang = 1 AND p.id_shop_default = 1 ;
В phpmyadmin можете проверить. Запрос находит товар по ид. Меняя "p.id_product = 4549" можно получить любой товар.
Я согласен, запрос верен, но это не меняет ситуацию - SQL менеджер выдаёт две ошибки
Понятно, что мою косорукость сложно понять и исправить удаленно, но возможно есть какие то мысли, я ж не уникальный вопрос задал?!
Может быть я не а той таблице обращаюсь? pc_products
14 Июнь 2018, 15:12:56
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Префикс у таблиц точно "pc_"?
14 Июнь 2018, 15:17:41
Ответ #12
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
ps_  конечно же. Описался. В программе я выбирал таблицы из предложенного, не в ручную, так что вряд ли из за этого
14 Июнь 2018, 15:39:46
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
14 Июнь 2018, 15:47:51
Ответ #14
  • Пользователь
  • **
  • Сообщений: 83
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля