Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: sql запрос
Форумы портала PHP.SU » » Вопросы новичков » sql запрос

Страниц (1): [1]
 

1. Prizma - 15 Июня, 2016 - 01:31:41 - перейти к сообщению
Есть три таблицы
products (id, cur_id, price)
actions (id, product_id, cur_id, price, start_time, finish_time)
currencies (id, rate)

Требует выбрать товары для которых существует действующая акционная цена.. и вроде всё просто:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT products.id FROM products, actions
  2. WHERE product.id = actions.product_id AND
  3.     actions.start_time < time() AND
  4.     actions.finish_time > time()


Однако из-за скачков курса некоторые акционные цены часто становятся выше начальной цены на сайте акционная цена скрывается если она выше нормальной цены. Нужен запрос который будет учитывать цену:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT products.id
  2. FROM products, actions, currencies
  3. WHERE product.id = actions.product_id AND
  4.     actions.start_time < time() AND
  5.     actions.finish_time > time() AND
  6.     products.cur_id = currencies.id AND
  7.     products.price * currencies.rate > actions.price * (X)


Если я сделаю подзапрос вместо X например:
(Х) =
CODE (SQL):
скопировать код в буфер обмена
  1. (SELECT currencies.rate FROM currencies WHERE currencies.cur_id = actions.cur_id)


То MySQL возвращает 0 строк в ответе без ошибок... Есть ли вариант одним запросом решить данную задачу?
(Добавление)
Помучался ещё немного и всё получилось Улыбка решил попробывать в рамках одного запроса вызывать одну таблицу несколько раз под разными псевдонимами.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT products.id
  2. FROM products, actions, currencies, currencies AS a_cur
  3. WHERE product.id = actions.product_id AND
  4.     actions.start_time < time() AND
  5.     actions.finish_time > time() AND
  6.     products.cur_id = currencies.id AND
  7.     a_cur.id = actions.currency_id AND
  8.     products.price * currencies.rate > actions.price * cur_a.rate

 

Powered by ExBB FM 1.0 RC1