ILexus Опубліковано: 15 травня 2020 Share Опубліковано: 15 травня 2020 (змінено) Всем привет. Помогите разобраться. Дано: Имеется функция getProductSpecials в catalog/model/catalog/product.php Используется для вывода товаров на странице с акциями. Задача: Необходимо дополнительно вывести на странице с акциями, товары, у которых поле fake_special > 0 в oc_product Поле есть, в карточке товара значение больше 0. Но никак не получается вывести данные товары. Попытки вставить p.fake_special > '0' в SQL запрос не увенчались успехом. Не могу понять в чем причина. Вставлял по разному, через AND и OR, все равно не проходит проверку. Отображается только если в карточке товара прописана Акция. Код оригинал $sql = "SELECT DISTINCT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id"; Вот так по идеи должно работать, но нет. Видимо что то упускаю. $sql = "SELECT DISTINCT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ((ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "') OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR (p.fake_special > '0')) GROUP BY ps.product_id"; Змінено 15 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options...
Vetroff Опубліковано: 16 травня 2020 Share Опубліковано: 16 травня 2020 (змінено) del Змінено 16 травня 2020 користувачем Vetroff точно Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 16 травня 2020 Share Опубліковано: 16 травня 2020 6 часов назад, ILexus сказал: Вот так по идеи должно работать, но нет. Видимо что то упускаю. вы упускаете это то есть товаров у которых нет акций там в принципе быть не может Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 18 травня 2020 Автор Share Опубліковано: 18 травня 2020 В 16.05.2020 в 09:45, spectre сказал: вы упускаете это то есть товаров у которых нет акций там в принципе быть не может Спасибо за ответ. Да действительно, мы ведь получаем данные из oc_product_special, а там не могут быть товары у которых не прописаны акции. Тогда к сожалению моих знаний не хватает, чтобы реализовать данную хотелку. Если только кто нибудь подскажет, как правильно и лучше сделать. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 18 травня 2020 Share Опубліковано: 18 травня 2020 Union Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 20 травня 2020 Автор Share Опубліковано: 20 травня 2020 В 19.05.2020 в 02:27, chukcha сказал: Union Спасибо за совет, получилось объединить два SELECT с помощью UNION, дополнительные товары вывелись. Правда не знаю правильно ли использовал UNION $sql = "SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id"; Но вылезла проблема с сортировкой, при ORDER BY p.sort_order например, вылезает ошибка Fatal error: Uncaught Exception: Error: Table 'p' from one of the SELECTs cannot be used in field list Не получается объединить оба SELECT под одним ORDER BY. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 20 травня 2020 Share Опубліковано: 20 травня 2020 А последний? Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 7 часов назад, chukcha сказал: А последний? Что последний?) Я конечно могу додумывать иногда, но в данном случае в замешательстве) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 (змінено) 2 часа назад, chukcha сказал: SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause' Змінено 21 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 ORDER BY t.sort_order Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Загальні питання Фукнция getProductSpecials, модифировать запрос для вывода дополнительных товаров. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
spectre Опубліковано: 16 травня 2020 Share Опубліковано: 16 травня 2020 6 часов назад, ILexus сказал: Вот так по идеи должно работать, но нет. Видимо что то упускаю. вы упускаете это то есть товаров у которых нет акций там в принципе быть не может Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 18 травня 2020 Автор Share Опубліковано: 18 травня 2020 В 16.05.2020 в 09:45, spectre сказал: вы упускаете это то есть товаров у которых нет акций там в принципе быть не может Спасибо за ответ. Да действительно, мы ведь получаем данные из oc_product_special, а там не могут быть товары у которых не прописаны акции. Тогда к сожалению моих знаний не хватает, чтобы реализовать данную хотелку. Если только кто нибудь подскажет, как правильно и лучше сделать. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 18 травня 2020 Share Опубліковано: 18 травня 2020 Union Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 20 травня 2020 Автор Share Опубліковано: 20 травня 2020 В 19.05.2020 в 02:27, chukcha сказал: Union Спасибо за совет, получилось объединить два SELECT с помощью UNION, дополнительные товары вывелись. Правда не знаю правильно ли использовал UNION $sql = "SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id"; Но вылезла проблема с сортировкой, при ORDER BY p.sort_order например, вылезает ошибка Fatal error: Uncaught Exception: Error: Table 'p' from one of the SELECTs cannot be used in field list Не получается объединить оба SELECT под одним ORDER BY. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 20 травня 2020 Share Опубліковано: 20 травня 2020 А последний? Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 7 часов назад, chukcha сказал: А последний? Что последний?) Я конечно могу додумывать иногда, но в данном случае в замешательстве) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 (змінено) 2 часа назад, chukcha сказал: SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause' Змінено 21 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 ORDER BY t.sort_order Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Загальні питання Фукнция getProductSpecials, модифировать запрос для вывода дополнительных товаров. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
ILexus Опубліковано: 18 травня 2020 Автор Share Опубліковано: 18 травня 2020 В 16.05.2020 в 09:45, spectre сказал: вы упускаете это то есть товаров у которых нет акций там в принципе быть не может Спасибо за ответ. Да действительно, мы ведь получаем данные из oc_product_special, а там не могут быть товары у которых не прописаны акции. Тогда к сожалению моих знаний не хватает, чтобы реализовать данную хотелку. Если только кто нибудь подскажет, как правильно и лучше сделать. Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 18 травня 2020 Share Опубліковано: 18 травня 2020 Union Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 20 травня 2020 Автор Share Опубліковано: 20 травня 2020 В 19.05.2020 в 02:27, chukcha сказал: Union Спасибо за совет, получилось объединить два SELECT с помощью UNION, дополнительные товары вывелись. Правда не знаю правильно ли использовал UNION $sql = "SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id"; Но вылезла проблема с сортировкой, при ORDER BY p.sort_order например, вылезает ошибка Fatal error: Uncaught Exception: Error: Table 'p' from one of the SELECTs cannot be used in field list Не получается объединить оба SELECT под одним ORDER BY. Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 20 травня 2020 Share Опубліковано: 20 травня 2020 А последний? Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 7 часов назад, chukcha сказал: А последний? Что последний?) Я конечно могу додумывать иногда, но в данном случае в замешательстве) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 (змінено) 2 часа назад, chukcha сказал: SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause' Змінено 21 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 ORDER BY t.sort_order Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Загальні питання Фукнция getProductSpecials, модифировать запрос для вывода дополнительных товаров. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
ILexus Опубліковано: 20 травня 2020 Автор Share Опубліковано: 20 травня 2020 В 19.05.2020 в 02:27, chukcha сказал: Union Спасибо за совет, получилось объединить два SELECT с помощью UNION, дополнительные товары вывелись. Правда не знаю правильно ли использовал UNION $sql = "SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id"; Но вылезла проблема с сортировкой, при ORDER BY p.sort_order например, вылезает ошибка Fatal error: Uncaught Exception: Error: Table 'p' from one of the SELECTs cannot be used in field list Не получается объединить оба SELECT под одним ORDER BY. Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 20 травня 2020 Share Опубліковано: 20 травня 2020 А последний? Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 7 часов назад, chukcha сказал: А последний? Что последний?) Я конечно могу додумывать иногда, но в данном случае в замешательстве) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 (змінено) 2 часа назад, chukcha сказал: SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause' Змінено 21 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 ORDER BY t.sort_order Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Загальні питання Фукнция getProductSpecials, модифировать запрос для вывода дополнительных товаров. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV
ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 7 часов назад, chukcha сказал: А последний? Что последний?) Я конечно могу додумывать иногда, но в данном случае в замешательстве) Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 (змінено) 2 часа назад, chukcha сказал: SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause' Змінено 21 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 ORDER BY t.sort_order Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 2.x Opencart 2.x: Загальні питання Фукнция getProductSpecials, модифировать запрос для вывода дополнительных товаров.
ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 (змінено) 2 часа назад, chukcha сказал: SELECT Union SELECT order by SELECT * FROM ( SELECT Union SELECT ) t order by Да я пробовал так объединить под общим SELECT $sql = "SELECT * FROM (SELECT ps.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id UNION SELECT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.fake_special > '0' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY p.product_id) t ORDER BY p.sort_order"; Fatal error: Uncaught Exception: Error: Unknown column 'p.sort_order' in 'order clause' Змінено 21 травня 2020 користувачем ILexus Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 ORDER BY t.sort_order Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Только что, chukcha сказал: ORDER BY t.sort_order Fatal error: Uncaught Exception: Error: Unknown column 't.sort_order' in 'order clause' Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 21 травня 2020 Share Опубліковано: 21 травня 2020 так его же нет в результирущем запросе Надіслати Поділитися на інших сайтах More sharing options... ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1
ILexus Опубліковано: 21 травня 2020 Автор Share Опубліковано: 21 травня 2020 Готовое решение На стековерфлоу посоветовали достать данные через таблицу oc_product. Не знаю кому может пригодится, но все же оставлю здесь. Спасибо всем кто пытался помочь Функция getProductSpecials $sql = "SELECT DISTINCT p.product_id, ( SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0') GROUP BY p.product_id"; Функция getTotalProductSpecials $query = $this->db->query(" SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_special ps ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND (ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' OR p.fake_special > '0') AND (((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) OR p.fake_special > '0')"); Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts