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

11 Апрель 2016, 13:12:33
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день!
Такой вопрос, не могу решить..
Есть запрос SQL
"SELECT p.id_product, p.active, pl.name, ps.name as psname, p.reference, GROUP_CONCAT(DISTINCT(cl.name) ORDER BY cl.`id_category` 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, tx.id_tax, tx.rate, sp.reduction, sp.reduction_type
| 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_supplier ps ON (p.id_supplier = ps.id_supplier)

| LEFT JOIN ps_tax tx ON (tx.id_tax = p.id_tax_rules_group)
| LEFT JOIN ps_specific_price sp ON (p.id_product = sp.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
|
|"

В строке запроса кусок
GROUP_CONCAT(DISTINCT(cl.name) ORDER BY cl.`id_category` SEPARATOR "","") as categoriesРаботает нормально но с выводом имен т.е.
DISTINCT(cl.name)Но если хочу получить не имена а   id_category  то ни чего не выводиться, или говорит что это массив..
GROUP_CONCAT(DISTINCT(cl. id_category  ) ORDER BY cl.`id_category` SEPARATOR "","") as categoriesПодскажите, что не так.
Во вложении результаты.
Спасибо!
11 Апрель 2016, 13:26:18
Ответ #1
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
И еще заметил, что на локале работает по id_category а на хосте не хочет.
11 Апрель 2016, 13:43:29
Ответ #2
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
И еще заметил, что на локале работает по id_category а на хосте не хочет.
Кеш отключите на хостинге.
Конф. хостинга какая?
11 Апрель 2016, 14:09:11
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Что интересует в конф. хостинга?
11 Апрель 2016, 14:14:33
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Вы на хостинге в phpMyAdmin этот запрос тестировали?
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
11 Апрель 2016, 14:16:58
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не догодался...  GROUP_CONCAT(DISTINCT(cl. id_category  ) ORDER BY cl.`id_category` SEPARATOR "","") as categories протестировать , сейчас попробую...
11 Апрель 2016, 15:29:51
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Запросы на хосте работают но при установке
GROUP_CONCAT(DISTINCT(cl.id_category) ORDER BY cl.`id_category` SEPARATOR "`,`") as categoriesв запрос выводит в поле categories  такое - [BLOB - 33 Байт] - что это?
Результат во вложении.
Спасибо.
11 Апрель 2016, 15:56:20
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
BLOB (англ. Binary Large Object — двоичный большой объект) — массив двоичных данных. В SQL BLOB — специальный тип данных, предназначенный, в первую очередь, для хранения изображений, аудио и видео.
Тип должен быть INT.
11 Апрель 2016, 16:16:48
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы где имеете в виду?
В базе он и так int(10)...
Если в запросе то как его воткнуть?
Спасибо.
11 Апрель 2016, 16:38:37
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
ID category - это INT
Когда объединяешь поля GROUP_CONCAT становится строкой.
В результете не работает.
11 Апрель 2016, 16:44:13
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
SELECT ..., GROUP_CONCAT(DISTINCT(c.id_category) ORDER BY c.`id_category` SEPARATOR ',') as categories, ....Попробуйте так.
Cоздание интернет сайтов Webstudio UwK
11 Апрель 2016, 16:48:50
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Цитировать
cl.id_category
В таблице ps_category_lang id_category не является уникальным.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
11 Апрель 2016, 16:49:42
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
SELECT ..., GROUP_CONCAT(DISTINCT(c.id_category) ORDER BY cl.`id_category` SEPARATOR ',') as categories, ....Попробуйте так.
+1
Опередели.
Толко исправьте
ORDER BY c.`id_category`
Можно еще упростить
SELECT ..., GROUP_CONCAT(c.id_category SEPARATOR ',') as categories, ....
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
11 Апрель 2016, 17:11:33
Ответ #13
  • Фрилансер
  • *
  • Сообщений: 153
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо но результат ноль..
Это не работает....

Давайте попробую поставить вопрос по другому..
Данный запрос отлично работает
Он формируед поле categories строкой состоящей из наименований групп товаров из таблицы ps_category_lang
Формирует нормально..
В данной таблице ps_category_lang есть поле id_category где категория тип int
Как сделать в запросе строку, с этим полем должно быть 10,7,5, и тд, а не  Главная,Каталог, и т.д
Ставлю
GROUP_CONCAT(DISTINCT(cl.id_category) ORDER BY cl.`id_category` SEPARATOR ',') as categoriesНа локале работает на хостинге нет..
Вот такие дела...
Спасибо.
11 Апрель 2016, 17:20:57
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
У проблемы с хостингом.

Запрос проверил на 3 разных серверах, на локальном тоже. Запрос работает.
GROUP_CONCAT(DISTINCT(c.id_category) ORDER BY cl.`id_category` SEPARATOR ',') as categories,и так
GROUP_CONCAT(c.id_category SEPARATOR ',') as categories,Везде возвращает ид категорий через запятую.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!