Здравствуйте. Суть задачи получить товары с близкой ценой от текущего товара (Рекомендуемые товары). Сайт на OpenCart.
К примеру текущая цена товара 50$, и нужно что бы показывались товары с самой близкой ценой, а не 100$ и не 10$.
Нашел запрос, получающий id товаров с рубрики. Однако нужно получить близкие товары по цене. Запрос:
$query = $this->db->query("SELECT DISTINCT(p2c.product_id) FROM `" . DB_PREFIX . "product_to_category` p2c LEFT JOIN `" . DB_PREFIX . "product` p ON (p2c.product_id = p.product_id) LEFT JOIN `" . DB_PREFIX . "product_to_store` p2s ON (p.product_id = p2s.product_id) WHERE p2c.category_id IN ('" . $category_list . "') AND p2c.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') . "' ORDER BY RAND() LIMIT " . $limit);
Цена находится в таблице product
и столбец price
Суть задачи сводится к трем подзадачам:
Объединить оба результата в одно решение через union all.
select ...
where ...
p.price > current_price order by p.price limit 1
union all
select ...
where ...
p.price < current_price order by p.price desc limit 1
Если надо еще как-то ограничить, то можно еще использовать математические операции, о чем тоже не следует забывать. К примеру если цена выше не должна превышать 10% от текущей стоимости.
and p.price > current_price and p.price < (current_price + current_price * 0.1)
Задачу можно решить в рамках одного SELECT
. Достаточно добавить такую сортировку:
SELECT ...
FROM ...
WHERE ...
ORDER BY
CASE
WHEN price < 'ваша стоимость'
THEN price + (('ваша стоимость' - price) * 2)
ELSE price
END ASC
LIMIT N
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Только начал изучать phpСоздаю чат