Есть три таблицы
products (id, cur_id, price)
actions (id, product_id, cur_id, price, start_time, finish_time)
currencies (id, rate)
Требует выбрать товары для которых существует действующая акционная цена.. и вроде всё просто:
CODE ( SQL):
скопировать код в буфер обмена
SELECT products.id FROM products, actions WHERE product.id = actions.product_id AND actions.start_time < time() AND actions.finish_time > time()
Однако из-за скачков курса некоторые акционные цены часто становятся выше начальной цены на сайте акционная цена скрывается если она выше нормальной цены. Нужен запрос который будет учитывать цену:
CODE ( SQL):
скопировать код в буфер обмена
SELECT products.id FROM products, actions, currencies WHERE product.id = actions.product_id AND actions.start_time < time() AND actions.finish_time > time() AND products.cur_id = currencies.id AND products.price * currencies.rate > actions.price * (X)
Если я сделаю подзапрос вместо X например:
(Х) =
То MySQL возвращает 0 строк в ответе без ошибок... Есть ли вариант одним запросом решить данную задачу?
(Добавление)
Помучался ещё немного и всё получилось решил попробывать в рамках одного запроса вызывать одну таблицу несколько раз под разными псевдонимами.
CODE ( SQL):
скопировать код в буфер обмена
SELECT products.id FROM products, actions, currencies, currencies AS a_cur WHERE product.id = actions.product_id AND actions.start_time < time() AND actions.finish_time > time() AND products.cur_id = currencies.id AND a_cur.id = actions.currency_id AND products.price * currencies.rate > actions.price * cur_a.rate
(Отредактировано автором: 15 Июня, 2016 - 01:44:10)
|