s89 Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Приветствую! Прошу мне помочь в решении задачи. К товару прикреплены рекомендуемые товары (related2) Вот такой запрос, достает минимальную цену из списка рекомендуемых товаров которые прикреплены (связаны) к конкретному ID товара. public function getProductRelated2Minprice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' "); return $query->row['min_price']; } То есть на странице продукта у меня есть переменная $min_product которая выводит самую меньшую цену из рекомендуемых товаров. Хотелось бы, сделать такое условие: Проверить, если акционная цена у списка рекомендуемых. Если есть, выбрать ту какая самая минимальная + подтянуть обычную цену этого товара. А если акционной нет, тогда выбрать минимальную цену (то что у меня уже есть) С минимальной ценой как то сам разобрался, а вот такое условие, как правильно сделать не знаю.. Надіслати Поділитися на інших сайтах More sharing options...
crapic Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 "SELECT MIN(IFNULL(ps.price,p.price)) AS min_price FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON(p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 @crapic Не совсем верно потому что надо еще проверять на дату акций @s89 Попробуйте более ясно сформулировать задачу. Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 15 минут назад, crapic сказал: MIN(IFNULL(ps.price,p.price)) AS min_price Спасибо за помощь! Но немного не то что мне нужно. Ваша функция выводит минимальную цену акции, а если ее нет, то минимальную цену. Возможно ли сюда добавить условие? Если есть цена акционная, то выбрать (по ID) также дефолтную цену этого товара. Что бы можно было вывести 2 цены в шаблоне (зачеркнутую и новую акционную) Надіслати Поділитися на інших сайтах More sharing options... crapic Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 угу и группу с приоритетом Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 1 минуту назад, chukcha сказал: @crapic Не совсем верно потому что надо еще проверять на дату акций @s89 Попробуйте более ясно сформулировать задачу. Да, на дату надо проверять. Я уж об этом не стал писать, думал сам как то уже разберусь, а то уж и так наверное много прошу Надіслати Поділитися на інших сайтах More sharing options... crapic Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 SELECT MIN(IFNULL(ps.price,p.price)) AS min_price, IFNULL(ps.price,p.price) as base_price Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 @crapic Такие запросы с "кондачка" не пишутся. Здесь возникает множество запросов Кортеж из акционных товаров - Выборка минимальной цены 1. Может быть минимальная у неакционного 2. Минимальной может быть акционная SELECT min(price) from product_related SELECT min(price) from product_special WHERE условия для действующих акций AND ps.product_id IN (SELECT product_id FROM product_related) Надеюсь, что получится самому запросы довести до ума? А строить один большой запрос - нет смысла Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 Я вот сейчас методом проб, что то сделал... public function getProductRelated2Minprice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price, (SELECT ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } Получаю 2 строки: 1) цена дефолтная (минимальная) 2) ценна акционная (первая по списку в таблице)Как достать акционную цену именно того товара, который я нашел с минимальной дефолтной ценой? Я не понимаю можно ли в одном запросе это сделать, как то сравнить ID... А если несколько запросов, то на данный момент я даже не пойму как их последовательно записать... Это я уже немного упростил как мне кажется... В идеале хотел начать проверку с акционной (если она есть) и тогда также по ID взять дефолтную, именно ту которая соответсвует одному и тому же товару В любом случае благодарю за помощь, есть над чем подумать)) Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 27 минут назад, crapic сказал: SELECT MIN(IFNULL(ps.price,p.price)) AS min_price, IFNULL(ps.price,p.price) as base_price Тут получается: 1) Минимальная цена (акция или обычная не важно, какая меньше) 2) Берет акционную цену первую в списке Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 2 минуты назад, s89 сказал: Я вот сейчас методом проб, что то сделал... Какой такой метод проб? Пробовать надо тогда, когда вы в голове получите четкое представление о своей задаче. Вам нужно два запроса ( я показал смісл єтих запросов) В модели не обязательно должно быть один и только один запрос - пример getProducts Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 1 час назад, chukcha сказал: Какой такой метод проб? Разбираться с MySql начал не давно. Не очень понимаю. Но учусь Записал так public function getProductMinPrice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } public function getProductMinSpecial($product_id) { $query = $this->db->query( "SELECT MIN(ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_special']; } 1) Получил Минимальную бозовую цену 2) Получил минимальную special цену Как выбрать special цену продукта у которого я дастал бозовую цену... Это не пониаю Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Второй запрос уже неверный! Пробуйте еще Нет учета групп дат приоритетов Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 8 минут назад, chukcha сказал: Нет учета групп дат приоритетов Это имеете ввиду? 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())) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Я ж говорил что задача не из простых, и простыми запросами не решается SELECT * FROM product WHERE price = ( SELECT price FROM product p , product_related pr WHERE pr.product_id = '" . (int)$product_id . "' AND p.product_id = pr.related_id ORDER BY price ASC LIMIT 1) Таким образом ві получите ВЕСЬ список товаров с минимальной ценой Затем, таким же образом вы получаете минимальную цену товаров с акциями Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 15 лютого 2017 Автор Share Опубліковано: 15 лютого 2017 public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 15 лютого 2017 Share Опубліковано: 15 лютого 2017 48 минут назад, s89 сказал: public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Фигню вы написали Потому что вы совсем не представляете, какая нагрузка будет на сервер А будет выполняться для второй столбца ровно count(realated_id) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Условие для правильной выборки цены из БД Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 15 минут назад, crapic сказал: MIN(IFNULL(ps.price,p.price)) AS min_price Спасибо за помощь! Но немного не то что мне нужно. Ваша функция выводит минимальную цену акции, а если ее нет, то минимальную цену. Возможно ли сюда добавить условие? Если есть цена акционная, то выбрать (по ID) также дефолтную цену этого товара. Что бы можно было вывести 2 цены в шаблоне (зачеркнутую и новую акционную) Надіслати Поділитися на інших сайтах More sharing options...
crapic Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 угу и группу с приоритетом Надіслати Поділитися на інших сайтах More sharing options...
s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 1 минуту назад, chukcha сказал: @crapic Не совсем верно потому что надо еще проверять на дату акций @s89 Попробуйте более ясно сформулировать задачу. Да, на дату надо проверять. Я уж об этом не стал писать, думал сам как то уже разберусь, а то уж и так наверное много прошу Надіслати Поділитися на інших сайтах More sharing options...
crapic Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 SELECT MIN(IFNULL(ps.price,p.price)) AS min_price, IFNULL(ps.price,p.price) as base_price Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 @crapic Такие запросы с "кондачка" не пишутся. Здесь возникает множество запросов Кортеж из акционных товаров - Выборка минимальной цены 1. Может быть минимальная у неакционного 2. Минимальной может быть акционная SELECT min(price) from product_related SELECT min(price) from product_special WHERE условия для действующих акций AND ps.product_id IN (SELECT product_id FROM product_related) Надеюсь, что получится самому запросы довести до ума? А строить один большой запрос - нет смысла Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 Я вот сейчас методом проб, что то сделал... public function getProductRelated2Minprice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price, (SELECT ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } Получаю 2 строки: 1) цена дефолтная (минимальная) 2) ценна акционная (первая по списку в таблице)Как достать акционную цену именно того товара, который я нашел с минимальной дефолтной ценой? Я не понимаю можно ли в одном запросе это сделать, как то сравнить ID... А если несколько запросов, то на данный момент я даже не пойму как их последовательно записать... Это я уже немного упростил как мне кажется... В идеале хотел начать проверку с акционной (если она есть) и тогда также по ID взять дефолтную, именно ту которая соответсвует одному и тому же товару В любом случае благодарю за помощь, есть над чем подумать)) Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 27 минут назад, crapic сказал: SELECT MIN(IFNULL(ps.price,p.price)) AS min_price, IFNULL(ps.price,p.price) as base_price Тут получается: 1) Минимальная цена (акция или обычная не важно, какая меньше) 2) Берет акционную цену первую в списке Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 2 минуты назад, s89 сказал: Я вот сейчас методом проб, что то сделал... Какой такой метод проб? Пробовать надо тогда, когда вы в голове получите четкое представление о своей задаче. Вам нужно два запроса ( я показал смісл єтих запросов) В модели не обязательно должно быть один и только один запрос - пример getProducts Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 1 час назад, chukcha сказал: Какой такой метод проб? Разбираться с MySql начал не давно. Не очень понимаю. Но учусь Записал так public function getProductMinPrice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } public function getProductMinSpecial($product_id) { $query = $this->db->query( "SELECT MIN(ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_special']; } 1) Получил Минимальную бозовую цену 2) Получил минимальную special цену Как выбрать special цену продукта у которого я дастал бозовую цену... Это не пониаю Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Второй запрос уже неверный! Пробуйте еще Нет учета групп дат приоритетов Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 8 минут назад, chukcha сказал: Нет учета групп дат приоритетов Это имеете ввиду? 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())) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Я ж говорил что задача не из простых, и простыми запросами не решается SELECT * FROM product WHERE price = ( SELECT price FROM product p , product_related pr WHERE pr.product_id = '" . (int)$product_id . "' AND p.product_id = pr.related_id ORDER BY price ASC LIMIT 1) Таким образом ві получите ВЕСЬ список товаров с минимальной ценой Затем, таким же образом вы получаете минимальную цену товаров с акциями Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 15 лютого 2017 Автор Share Опубліковано: 15 лютого 2017 public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 15 лютого 2017 Share Опубліковано: 15 лютого 2017 48 минут назад, s89 сказал: public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Фигню вы написали Потому что вы совсем не представляете, какая нагрузка будет на сервер А будет выполняться для второй столбца ровно count(realated_id) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Условие для правильной выборки цены из БД Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 Я вот сейчас методом проб, что то сделал... public function getProductRelated2Minprice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price, (SELECT ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } Получаю 2 строки: 1) цена дефолтная (минимальная) 2) ценна акционная (первая по списку в таблице)Как достать акционную цену именно того товара, который я нашел с минимальной дефолтной ценой? Я не понимаю можно ли в одном запросе это сделать, как то сравнить ID... А если несколько запросов, то на данный момент я даже не пойму как их последовательно записать... Это я уже немного упростил как мне кажется... В идеале хотел начать проверку с акционной (если она есть) и тогда также по ID взять дефолтную, именно ту которая соответсвует одному и тому же товару В любом случае благодарю за помощь, есть над чем подумать)) Надіслати Поділитися на інших сайтах More sharing options...
s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 27 минут назад, crapic сказал: SELECT MIN(IFNULL(ps.price,p.price)) AS min_price, IFNULL(ps.price,p.price) as base_price Тут получается: 1) Минимальная цена (акция или обычная не важно, какая меньше) 2) Берет акционную цену первую в списке Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 2 минуты назад, s89 сказал: Я вот сейчас методом проб, что то сделал... Какой такой метод проб? Пробовать надо тогда, когда вы в голове получите четкое представление о своей задаче. Вам нужно два запроса ( я показал смісл єтих запросов) В модели не обязательно должно быть один и только один запрос - пример getProducts Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 1 час назад, chukcha сказал: Какой такой метод проб? Разбираться с MySql начал не давно. Не очень понимаю. Но учусь Записал так public function getProductMinPrice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } public function getProductMinSpecial($product_id) { $query = $this->db->query( "SELECT MIN(ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_special']; } 1) Получил Минимальную бозовую цену 2) Получил минимальную special цену Как выбрать special цену продукта у которого я дастал бозовую цену... Это не пониаю Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Второй запрос уже неверный! Пробуйте еще Нет учета групп дат приоритетов Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 8 минут назад, chukcha сказал: Нет учета групп дат приоритетов Это имеете ввиду? 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())) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Я ж говорил что задача не из простых, и простыми запросами не решается SELECT * FROM product WHERE price = ( SELECT price FROM product p , product_related pr WHERE pr.product_id = '" . (int)$product_id . "' AND p.product_id = pr.related_id ORDER BY price ASC LIMIT 1) Таким образом ві получите ВЕСЬ список товаров с минимальной ценой Затем, таким же образом вы получаете минимальную цену товаров с акциями Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 15 лютого 2017 Автор Share Опубліковано: 15 лютого 2017 public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 15 лютого 2017 Share Опубліковано: 15 лютого 2017 48 минут назад, s89 сказал: public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Фигню вы написали Потому что вы совсем не представляете, какая нагрузка будет на сервер А будет выполняться для второй столбца ровно count(realated_id) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Условие для правильной выборки цены из БД Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 1 час назад, chukcha сказал: Какой такой метод проб? Разбираться с MySql начал не давно. Не очень понимаю. Но учусь Записал так public function getProductMinPrice($product_id) { $query = $this->db->query( "SELECT MIN(p.price) as min_price FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_price']; } public function getProductMinSpecial($product_id) { $query = $this->db->query( "SELECT MIN(ps.price) as min_special FROM ". DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_special ps ON (p.product_id = ps.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW() "); return $query->row['min_special']; } 1) Получил Минимальную бозовую цену 2) Получил минимальную special цену Как выбрать special цену продукта у которого я дастал бозовую цену... Это не пониаю Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Второй запрос уже неверный! Пробуйте еще Нет учета групп дат приоритетов Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 8 минут назад, chukcha сказал: Нет учета групп дат приоритетов Это имеете ввиду? 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())) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Я ж говорил что задача не из простых, и простыми запросами не решается SELECT * FROM product WHERE price = ( SELECT price FROM product p , product_related pr WHERE pr.product_id = '" . (int)$product_id . "' AND p.product_id = pr.related_id ORDER BY price ASC LIMIT 1) Таким образом ві получите ВЕСЬ список товаров с минимальной ценой Затем, таким же образом вы получаете минимальную цену товаров с акциями Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 15 лютого 2017 Автор Share Опубліковано: 15 лютого 2017 public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 15 лютого 2017 Share Опубліковано: 15 лютого 2017 48 минут назад, s89 сказал: public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Фигню вы написали Потому что вы совсем не представляете, какая нагрузка будет на сервер А будет выполняться для второй столбца ровно count(realated_id) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Допомога програмістам та розробникам Условие для правильной выборки цены из БД
s89 Опубліковано: 14 лютого 2017 Автор Share Опубліковано: 14 лютого 2017 8 минут назад, chukcha сказал: Нет учета групп дат приоритетов Это имеете ввиду? 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())) Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 14 лютого 2017 Share Опубліковано: 14 лютого 2017 Я ж говорил что задача не из простых, и простыми запросами не решается SELECT * FROM product WHERE price = ( SELECT price FROM product p , product_related pr WHERE pr.product_id = '" . (int)$product_id . "' AND p.product_id = pr.related_id ORDER BY price ASC LIMIT 1) Таким образом ві получите ВЕСЬ список товаров с минимальной ценой Затем, таким же образом вы получаете минимальную цену товаров с акциями Надіслати Поділитися на інших сайтах More sharing options... s89 Опубліковано: 15 лютого 2017 Автор Share Опубліковано: 15 лютого 2017 public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 15 лютого 2017 Share Опубліковано: 15 лютого 2017 48 минут назад, s89 сказал: public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Фигню вы написали Потому что вы совсем не представляете, какая нагрузка будет на сервер А будет выполняться для второй столбца ровно count(realated_id) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
s89 Опубліковано: 15 лютого 2017 Автор Share Опубліковано: 15 лютого 2017 public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 15 лютого 2017 Share Опубліковано: 15 лютого 2017 48 минут назад, s89 сказал: public function getProductMinSpecial($product_id) { $query = $this->db->query(" SELECT (ps.price) AS min_special, (SELECT p.price) AS min_price FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON ( pr.related_id = p.product_id ) LEFT JOIN " . DB_PREFIX . "product_special ps ON ( p.product_id = ps.product_id ) WHERE pr.product_id = '" . (int)$product_id . "' AND ps.product_id = p.product_id AND p.price > '0' AND p.status = '1' AND p.date_available <= NOW( ) 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( ))) ORDER BY ps.price ASC LIMIT 1 "); return $query->row['min_special']; Такой код достает данные в принципе что мне нужно (2 колонки по 1-ой строке): http://joxi.ru/Rmz5PlGf4500rO Подскажите как вывести этих 2 значения в 2 разные переменные? Фигню вы написали Потому что вы совсем не представляете, какая нагрузка будет на сервер А будет выполняться для второй столбца ровно count(realated_id) Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts