Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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 для разработки своих дополнений?

 

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

Link to post
Share on other sites

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

 

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?

Link to post
Share on other sites
36 минут назад, Eldaeron сказал:

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

 

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

Link to post
Share on other sites

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')

 

Link to post
Share on other sites
37 минут назад, Eldaeron сказал:

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

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

  • +1 1
Link to post
Share on other sites
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 ;)

Link to post
Share on other sites

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

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

Link to post
Share on other sites
3 минуты назад, Eldaeron сказал:

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

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

 

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

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

Link to post
Share on other sites
7 минут назад, AlexDW сказал:

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

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

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

Link to post
Share on other sites
11 минут назад, chukcha сказал:

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

 

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

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

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By Speaker12
      Скачать/Купить дополнение


      Предварительный просмотр Google сниппета
      Данный модификатор поможет вам увидеть, как будет выглядеть поисковой сниппет в Google и Yandex.
      Данные для предварительного просмотра будут браться с полей:1. SEO URL2. Meta Tag Title3. Meta Tag Description
      Для работы данного модуля неважно какой редактор кода встроен на сайте. Данные берутся с поля input, textarea. 
       
      Адаптация требуется если в вашей админ панели сторонние модули изменяю страницу добавления - редактирования товара
      Добавил Speaker12 Добавлено 19.12.2021 Категория SEO, карта сайта, оптимизация Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3.0.2.4
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • By Speaker12
      Данный модификатор поможет вам увидеть, как будет выглядеть поисковой сниппет в Google и Yandex.
      Данные для предварительного просмотра будут браться с полей:1. SEO URL2. Meta Tag Title3. Meta Tag Description
      Для работы данного модуля неважно какой редактор кода встроен на сайте. Данные берутся с поля input, textarea. 
       
      Адаптация требуется если в вашей админ панели сторонние модули изменяю страницу добавления - редактирования товара
    • By Slavik7
      Добрый вечер!
       
      Уже неделю не могу решить вопрос с сортировкой товаров. Нужно чтобы при любой стандартной сортировке, товары со статусом "нет в наличии" были в самом конце.
       
      Нашел много статей на эту тему, но для 2 версии OpenCart. Для 3-й же версии нашел всего лишь парочку статей. Но все эти решения не дали результат.
       
      Думаю для знающих и разбирающихся в php и MySql это довольно легкая задача. Буду благодарен если поможете в этом вопросе.
    • By AlexMax13
      Предлагаю составить список таблиц в БД, которые время от времени желательно очищать.
       
       
      Данные действия рекомендуется выполнять для больших сайтов с множеством клиентов. Ну или тех, которые годами не подозревали что у них есть БД и сайт начинает тормозить.
       
      Если знаете что еще можно очистить - дополняйте. Только хотя бы в двух словах опишите что предлагаете очистить.
    • By oc_
      390
      Скачать/Купить дополнение


      Собственные поля в админке (CustomSetting)
      Модуль выводит новые дополнительные поля в любые формы админ панели, которые вы укажете.
       
      Внимание! Модуль предназначен исключительно для разработчиков, так как для получения значений полей, вам потребуется собственный ocmod или правка контроллеров.
       


       
      Логин: demo
      Пароль: demo
       
      Принцип работы модуля
      Устанавливаете модуль Добавляете новое поле через форму Указываете где хотите выводить, например в форме товара Идете в форму товара, указываете значение поля Выводите информацию из этого поля через контроллер в каталоге или ocmod через несколько строчек




      Список полей которые можно добавить

      

      Что бы максимально огородить вас от того что бы лезть в файлы, есть
      Проверка обязательности PHP проверка regex, Указание любых типов данных в качестве значений, товары, категории, опции и т.д Создание блоков с другими полями, как у атрибутов товара, в качестве блока, может быть так же другой блок Маска поля regex, телефон, email и т.д Возможность указать поле для просмотра, абсолютно в любой форме в админ панели, в том числе и любой модуль Если же вам всё же потребуется, есть возможность указать свой контроллер, для проверки поля, указания своих значений и вывода

      Форма добавления/Редактирования поля


      Что ещё можно сделать?
      Указать Placeholder Указать ширину Указать поле help Указать сортировку Указать текст ошибки И дополнительно для каждого поля, есть разные опции
      
       
      В режиме разработчика
      Можно интегрировать поле, что бы его нельзя было удалить и редактировать, поле склеивается с CMS Просмотреть код для установки поля,  через свой компонент (установщик) Просмотреть пример кода, для вставки в контроллер, ocmod и twig, для отображения информации на сайте  Что требуется для отображения информации на сайте?
      В контроллере сделать запрос к значениям поля
       
      // Получаем значение поля categories из секции my_section $setting_value = $this->load->controller('custom/setting/getValue', array( 'section' => 'my_section', // Уникальный индикатор секции который указывается при создании в админ панели 'setting' => 'categories', // Уникальный индикатор поля который указывается при создании в админ панели 'page' => 'setting' // Код формы в админ-панели, например setting, product, module 'id' => '23' // id, например id товара, категории, модуля и т.д )); // Инициализируем полученные данные $data['setting_value'] = $setting_value;
       
      Код: в текущем шаблоне twig вывести и обработать информацию {{ setting_value }}

      Как видите, для того что бы внедрить поле в opencart, требуется всего пару строк, которые вы можете вставить с помощью ocmod
      При этом, если интегрировать поле, в режиме разработчика, его нельзя будет удалить, что определенно иногда имеет смысл

      Когда может потребоваться данный модуль?
      При внедрении на сайт дополнительной информации При необходимости указать дополнительные значение какому-либо объекту, товару, магазину, категории При разработке своей темы При разработке дополнения Если вы разрабатываете магазин на opencart, этот модуль вам заменит большинство платных модулей при минимальном знании php и twig Ускорить вашу работу в разы Расширить opencart
      Экспорт настроек
       
      Установка

      
       
       
       
      Добавил oc_ Добавлено 15.01.2021 Категория Прочее Системные требования Ioncube Loader Метод активации Автоматическая активация Ioncube Loader Требуется OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Opencart.pro 2.3 Обращение к серверу разработчика Да  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.