Автор Тема: SQL запрос товара с БД  (Прочитано 112 раз)

09 Марта 2016, 16:25:58
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день!
Всех с прошедшим праздником!
Вопрос такой.
Есть SQL запрос

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
По тавару устраивает..
Есть в админ при вводе товара выбор поставщика
Поставщики текущего товара..
По умолчанию отмечен.
Каким образом можно вставить в этот SQL запрос выборку поставщика по умолчанию.
Поле p.reference выдает пустое.
Как бы поставить типа reference_default ?
Спасибо!
09 Марта 2016, 16:36:06
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 2169
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
В базе можешь поменять поле reference
ALTER TABLE `ps_product` CHANGE `reference` `reference` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'то что тебе нужно';
09 Марта 2016, 16:53:24
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А при чем тут замена поля таблицы БД?
Вопрос стоит как поставить дополнительно в запрос выше, выборку из таблицы ps_supplier поля name  по id_supplier
Пробовал

SELECT p.id_product, p.active, pl.name, su.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_supplier su ON (p.id_supplier = su.id_supplier)
......

Но выдает ошибку так-как поле  имя pl.name, su.name, одинаковые..

09 Марта 2016, 17:01:14
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 2169
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Как бы поставить типа reference_default ?
Какой вопрос такой и ответ.
Поле reference по умолчанию NULL. Как изменить значение по умолчанию я написал.
09 Марта 2016, 17:09:03
Ответ #4
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85953
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Есть в админ при вводе товара выбор поставщика
Поставщики текущего товара..
По умолчанию отмечен.
Каким образом можно вставить в этот SQL запрос выборку поставщика по умолчанию.
На какой странице?
Смотрите в адресной строке название контроллера, например,
/index.php?controller=AdminProducts&id_product=1&updateproduct&...Значит это файл
/controllers/admin/AdminProductsController.php
в нем меняете запрос.
09 Марта 2016, 17:13:58
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
Ну еще нужно и &action узнать, чтобы не искать по всему файлу.
Для поставщика это &action=Suppliers, функция processSuppliers()
// Get all available suppliers
$suppliers = Supplier::getSuppliers();

// Get already associated suppliers
$associated_suppliers = ProductSupplier::getSupplierCollection($product->id);
Так что не всегда можно сменить sql запрос в том же контроллере.
09 Марта 2016, 17:30:47
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +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 ";

Таблица заполнена , но без поставщика.
Можно поставщиков поставить другим запросом, но хотелось сделать все в одном.
У кого какие соображения?
Спасибо!


09 Марта 2016, 17:49:34
Ответ #7
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
SELECT ..., ps.name,...
LEFT JOIN `ps_supplier` ps ON p.`id_supplier` = ps.`id_supplier`
09 Марта 2016, 17:59:07
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо!
Но этот вариант я пробовал, выше есть..
Ошибка в том что в выборке два поля с одинаковым именем name.
Так ни едет..
Ошибка одинаковых имен выборки.
09 Марта 2016, 18:03:35
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
SELECT ..., ps.name AS supplier,...Это же элементарно, что об этом писать.
Справочник по sql командам скачайте.
09 Марта 2016, 18:29:29
Ответ #10
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо большое!
Ну тормознул немного.. :)
Что-уж так строго, бывает всякое.... 
Спасибо всем за ответы!
Вопрос закрыт!
Всем доброго!