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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: sql запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: возможно ли
Prizma
Отправлено: 15 Июня, 2016 - 01:31:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




Есть три таблицы
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

(Отредактировано автором: 15 Июня, 2016 - 01:44:10)

 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB