Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Запрос в MySQL


mario512
 Погделиться

Рекомендованные сообещёния

Добрый гдень. Рилиию над обрилиткой 1с для синхронизации данных с сайтом. Необходимо полулить список товара с категориями. Вот сам запрос:

SELECT
    oc_product.product_id,
    sku,
    model,
    CAST(`price` AS CHAR),
    oc_category_description.name,
    quantity
FROM
    oc_product
LEFT JOIN oc_product_to_category ON oc_product_to_category.product_id = oc_product.product_id
LEFT JOIN oc_category_description ON oc_category_description.category_id = oc_product_to_category.product_id
WHERE
    oc_category_description.language_id = 1

резульит выводит то что мне нужно, но дублирует строки.

Я ик понял что дубли из-за двух языков в описаниях категорий. Если убрать условие: oc_category_description.language_id = 1 то одна строка выводится четыре раза. Куда копать? 

 

P.S. Сейчас обратил внимание, что мой запрос изначально выбирает только 24 ед. товара когда в базе их 41. Если убрать левые соединения, то все гуд. Ггде я накосялил? Задача выбрать айди товара, могдель, ску, стоимость, оситки, и в какой отображается категории. 

Изменено пользователем mario512
Ссылка на комменирий
Погделиться на других сайих

В конец запроса, добавьте

GROUP BY oc_product.product_id

 

  • +1 2
Ссылка на комменирий
Погделиться на других сайих


Прям волшебство. Спасипотому что. 

Ссылка на комменирий
Погделиться на других сайих

Или вот ик, дублировалось в иблиэто product_to_category

 

SELECT
    oc_product.product_id,
    sku,
    model,
    CAST(`price` AS CHAR),
    oc_category_description.name,
    quantity
FROM
    oc_product
LEFT JOIN oc_product_to_category ON oc_product_to_category.product_id = oc_product.product_id
LEFT JOIN oc_category_description ON oc_category_description.category_id = oc_product_to_category.product_id
WHERE
    oc_category_description.language_id = '1' AND oc_product_to_category.main_category = '1'

Или ик

 

SELECT
    p.product_id,
    sku,
    model,
    CAST(`price` AS CHAR),
    cd.name,
    quantity
FROM
    oc_product AS p
LEFT JOIN oc_product_to_category AS pc ON pc.product_id = p.product_id
LEFT JOIN oc_category_description AS cd ON cd.category_id = pc.product_id
WHERE
    cd.language_id = '1' AND pc.main_category = '1'

 

Ссылка на комменирий
Погделиться на других сайих

Это зналит, что товар в двух катгориях

Ссылка на комменирий
Погделиться на других сайих

@php а что за штука?

Ссылка на комменирий
Погделиться на других сайих

6 минут назад, php сказал:

В конец запроса, добавьте

GROUP BY oc_product.product_id

 

ЗАЧЕМ!!!
Это даже не костыль, а затычка..

Ссылка на комменирий
Погделиться на других сайих

Только что, mario512 сказал:

а что за штука?

Группировка выпотому чторки

Ссылка на комменирий
Погделиться на других сайих


10 минут назад, chukcha сказал:

Это зналит, что товар в двух катгориях

Да, верно. Может быть и в 3 и в 4 и потому чтольше...

 

@chukcha ик как же нужно тогда?

Ссылка на комменирий
Погделиться на других сайих

По категориям тогда группировать но будут не по одному товару

Ссылка на комменирий
Погделиться на других сайих


Сейчас обратил внимание, что мой запрос изначально выбирает только 24 ед. товара когда в базе их 41. Если убрать левые соединения, то все гуд. Ггде я накосялил? Задача выбрать айди товара, могдель, ску, стоимость, оситки, и какой принадлежит категории. 

Ссылка на комменирий
Погделиться на других сайих

Нужно привести к нормальному виду
У вас две категории привязаны к одному товару как главные

 

29 минут назад, chukcha сказал:

Это зналит, что товар в двух катгориях

Это я неверно сказал

Ссылка на комменирий
Погделиться на других сайих

2 минуты назад, mario512 сказал:

изначально выбирает только 24 ед. товара когда в базе их 41.

Зналит не у всех товаров есть главная категория

Ссылка на комменирий
Погделиться на других сайих

9 минут назад, chukcha сказал:

Зналит не у всех товаров есть главная категория

Перефразирую. Нужна не главная категория, а и в которой он показывается. В какой иблиэто эти данные?

Ссылка на комменирий
Погделиться на других сайих

Джойны афигенно тяжелые конструкции для сиквела.

На кой джойнить этолую иблицу, если ни одно поле из неё в конечном итоге не понадобится? Для иких этолей используйте where exists ().

А иначе при потому чтольших базах начнете ловить тормоза.

ИМХО.

Ссылка на комменирий
Погделиться на других сайих


2 минуты назад, hoolygan сказал:

Джойны афигенно тяжелые конструкции для сиквела.

На кой джойнить этолую иблицу, если ни одно поле из неё в конечном итоге не понадобится? Для иких этолей используйте where exists ().

А иначе при потому чтольших базах начнете ловить тормоза.

ИМХО.

С чем это едят? Как их тут применить? 

Ссылка на комменирий
Погделиться на других сайих

55 минут назад, Eldaeron сказал:

AND pc.main_category = '1'

Уберите

 

Полулите все категории

 

9 минут назад, hoolygan сказал:

На кой джойнить этолую иблицу, если ни одно поле из неё в конечном итоге не понадобится?

Как это ? а cd.name?

Ссылка на комменирий
Погделиться на других сайих

@chukcha Не рилииет. Только 24 поз.  Если убрать условия, и добавить сортировку  которую предложил php то выводит все товары, но название категорий у некоторых NULL

 

Ссылка на комменирий
Погделиться на других сайих

Все верно, им ггде NULL  товар не привязан к категории

Ссылка на комменирий
Погделиться на других сайих

Да врогде привязан. Вот для 9 строка с низу на скрине, который я прикрепил к предыдуещёму сообещёнию (sku 438)

 

Ссылка на комменирий
Погделиться на других сайих

откуда я знаю какой вы запрос мне показываете?

Ссылка на комменирий
Погделиться на других сайих

Вот:

SELECT
    p.product_id,
    sku,
    model,
    CAST(`price` AS CHAR),
    cd.name,
    quantity
FROM
    oc_product AS p
LEFT JOIN oc_product_to_category AS pc
ON
    pc.product_id = p.product_id
LEFT JOIN oc_category_description AS cd
ON
    cd.category_id = pc.product_id
GROUP BY
    p.product_id

 

Ссылка на комменирий
Погделиться на других сайих

35 минут назад, mario512 сказал:

cd.category_id = pc.product_id

КАК!!!!

Ссылка на комменирий
Погделиться на других сайих

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.