Как получить поля с ближайшим значением от числа sql

322
09 мая 2017, 04:18

Здравствуйте. Суть задачи получить товары с близкой ценой от текущего товара (Рекомендуемые товары). Сайт на 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

Answer 1

Суть задачи сводится к трем подзадачам:

  1. Получить товар с ценой больше текущей.
  2. Получить товар с ценой меньше текущей.
  3. Объединить оба результата в одно решение через 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)  
Answer 2

Задачу можно решить в рамках одного SELECT. Достаточно добавить такую сортировку:

SELECT ...
FROM ...
WHERE ...
ORDER BY
  CASE
    WHEN price < 'ваша стоимость'
      THEN price + (('ваша стоимость' - price) * 2)
      ELSE price
  END ASC
LIMIT N
READ ALSO
SQLSTATE[HY000]: General error: 2053

SQLSTATE[HY000]: General error: 2053

Ошибка: SQLSTATE[HY000]: General error: 2053

333
Вывод данных из БД php PDO

Вывод данных из БД php PDO

Ребят, всем приветЕсть такая БД:

537
Исключить из выборки

Исключить из выборки

У меня запрос который возвращает вот такой результат

296
PHP, MYSQL - Ошибка expects at least &hellip; parameters (Помогите пожалуйста)

PHP, MYSQL - Ошибка expects at least … parameters (Помогите пожалуйста)

Только начал изучать phpСоздаю чат

237