Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Сложный запрос в mysql


Recommended Posts

Здравствуйте, помогите. Не сильный в mysql, но нужно выбрать некоторую информацию.

 

Из готовых заказов, те что выполненны нужно взять те что заказали с этого года по сегодня, легко:

SELECT * FROM oc_order WHERE oc_order.order_status_id = 19 AND oc_order.date_modified BETWEEN '2018-01-01 00:00:00' AND '2018-02-02 23:59:59'

Например нашло 30 заказов, скажем ид 3000 - 3030, как дальше выбрать все товары, это таблица oc_order_product

 

Через цикл foreach? Или модифицировать 1 запрос вот так?

SELECT * FROM oc_order_product WHERE oc_order_product.order_id in (SELECT oc_order.order_id FROM oc_order WHERE oc_order.order_status_id = 19 AND oc_order.date_modified BETWEEN '2018-01-01 00:00:00' AND '2018-02-02 23:59:59')

И потом ище выбрать только те товары у которых производитель Apple (manufacturer_id = 1)

 

В таблице oc_order_product нет колонки manufacturer, но зато она есть в oc_product

 

Как тут быть? Что-то думаю нужно взять JOIN, но как сделать запрос так и не понял)

 

Какими программами вы пользуетесь для построенния таких сложных запросов mysql для разработки своих дополнений?

 

Надеюсь на понимание, спасибо.

Надіслати
Поділитися на інших сайтах

Такое решение верно?

 

SELECT
order_id.order_id,
product.product_id,
product.model,
product.sku,
product.mpn,
product.manufacturer_id,
product.price,
product.entry_price,
order_product.order_product_id,
order_product.order_id,
order_product.product_id,
order_product.quantity
FROM
oc_order AS order_id ,
oc_order_product AS order_product ,
oc_product AS product
WHERE
order_id.date_modified BETWEEN '2018-01-01 00:00:00' AND '2018-02-02 23:59:59' AND
order_product.order_id = order_id.order_id AND
product.manufacturer_id = '1'

С Navicat попробувал, чтото выдало, но незнаю нормальный ли запрос, несколько записей повторяються, логично же заказывали один и тот же товар несколько раз. Как их сгрупировать в один при том чтоб их количество подсчиталось, это можна с помощью SQL, или уже PHP?

Надіслати
Поділитися на інших сайтах

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

С Navicat попробувал, чтото выдало, но незнаю нормальный ли запрос, несколько записей повторяються, логично же заказывали один и тот же товар несколько раз. Как их сгрупировать в один при том чтоб их количество подсчиталось, это можна с помощью SQL, или уже PHP?

 

GROUP BY для объединения и COUNT (*) для подсчета. И используйте форматированный код, а то так все мимо пройдут, я вот тоже - даже смотреть код не стал.

Надіслати
Поділитися на інших сайтах

explain юзайте

 

как вариант

SELECT op.*, p.manufacturer_id
FROM oc_order_product op
LEFT JOIN oc_product p ON (p.product_id = op.product_id)
WHERE p.manufacturer_id = 1
AND op.order_id in (SELECT o.order_id FROM oc_order o WHERE o.order_status_id = 1 AND o.date_modified BETWEEN '2018-01-01 00:00:00' AND '2018-02-02 23:59:59')

 

Надіслати
Поділитися на інших сайтах

7 минут назад, halfhope сказал:

 

GROUP BY для объединения и COUNT (*) для подсчета. 

Спасибо протестируем.

5 минут назад, AlexDW сказал:

explain юзайте

 

как вариант


SELECT op.*, p.manufacturer_id
FROM oc_order_product op
LEFT JOIN oc_product p ON (p.product_id = op.product_id)
WHERE p.manufacturer_id = 1
AND op.order_id in (SELECT o.order_id FROM oc_order o WHERE o.order_status_id = 1 AND o.date_modified BETWEEN '2018-01-01 00:00:00' AND '2018-02-02 23:59:59')

 

Сейчас проверим.

 

1 минуту назад, AlexDW сказал:

жуть жуткая :ugeek:

Та понял:)

 

С навикат сделал вот такой запрос: Сократились заказы с 15к до 39:-D

SELECT
order_id.order_id,
product.product_id,
product.model,
product.sku,
product.mpn,
product.manufacturer_id,
product.price,
product.entry_price,
order_product.order_product_id,
order_product.order_id,
order_product.product_id,
order_product.quantity
FROM
oc_order AS order_id
INNER JOIN oc_order_product AS order_product ON order_id.order_id = order_product.order_id
INNER JOIN oc_product AS product ON order_product.product_id = product.product_id
WHERE
order_id.date_modified BETWEEN '2018-01-01 00:00:00' AND '2018-02-02 23:59:59' AND
order_product.order_id = order_id.order_id AND
product.manufacturer_id = '11' AND
order_id.order_status_id = '19'

Да, видимо нужно ище найти хороший видеоурок по mysql ;)

Надіслати
Поділитися на інших сайтах

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

Да, видимо нужно ище найти хороший видеоурок по mysql 

ві учитесь по видеоурокам?

 

http://www.sql-ex.ru/?Lang=0

Настоятельно рекомендую
Очень хорошо грузит мозги
 

Надіслати
Поділитися на інших сайтах

7 минут назад, AlexDW сказал:

берегите бумагу байты :-D, используйте алиасы

гораздо читабельней и удобней

да, уменьшил. oc_order AS o, oc_order_product AS op, oc_product AS p

Надіслати
Поділитися на інших сайтах

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

ві учитесь по видеоурокам?

 

http://www.sql-ex.ru/?Lang=0

Настоятельно рекомендую
Очень хорошо грузит мозги
 

Ну не только, но обычно html по zvirec.com начинал, php с lynda.com хороший старт дала, потом практиковался) Правда там mysql затронут был простый был, SELECT * FROM все, конец))) Мне mysql не так сильно надо было на высшем уровне. Обычно в фильтрах тяжелый mysql код, а в остальных модулях SELECT * FROM хватает)

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.