Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нестандартная сортировка
 
 автор: Mookapek   (19.03.2010 в 01:46)   письмо автору
 
 

Необходимо выбрать из таблицы товарные позиции, где цены указаны в разных валютах. Проблема в том, как все это отсортировать.
Пример запроса:
SELECT ..., price, currency, ... FROM product ORDER BY price. (на месте многоточий несколько других столбцов)
Но такой запрос выведет позицию с ценой 100 долларов выше позиции с ценой 120 рублей, хотя 100 долларов больше 120-и рублей.
Я создал специальную таблицу курсов некоторых валют:

+-----+----------+--------------+
| id  |  curren  |   inrouble   |
+-----+----------+--------------+
|  1  |   usd    |      30      |
+-----+----------+--------------+
|  2  |   eur    |      40      |
+-----+----------+--------------+

И вот не знаю как правильно связать эти таблицы в одном запросе.

  Ответить  
 
 автор: Trianon   (19.03.2010 в 01:59)   письмо автору
 
   для: Mookapek   (19.03.2010 в 01:46)
 

Дык наверное ORDER BY price * inrouble ?

  Ответить  
 
 автор: Mookapek   (20.03.2010 в 00:16)   письмо автору
 
   для: Trianon   (19.03.2010 в 01:59)
 

Что это за конструкция такая странная? Отсортировать по полю price умноженному на поле inrouble? Я чего-то не понимаю...

  Ответить  
 
 автор: Trianon   (20.03.2010 в 00:36)   письмо автору
 
   для: Mookapek   (20.03.2010 в 00:16)
 

Да, наверное...

  Ответить  
 
 автор: Mookapek   (20.03.2010 в 01:20)   письмо автору
 
   для: Trianon   (20.03.2010 в 00:36)
 

Ну а как связать то эти таблицы? Столбец inrouble из другой таблицы то, поэтому mysql пишет, что мол unknow column.

  Ответить  
 
 автор: Trianon   (20.03.2010 в 13:32)   письмо автору
 
   для: Mookapek   (20.03.2010 в 01:20)
 

Обычным образом. С помощью t1 LEFT JOIN t2 ON условие_сопоставления_строк

  Ответить  
 
 автор: Mookapek   (23.03.2010 в 00:47)   письмо автору
 
   для: Trianon   (20.03.2010 в 13:32)
 

Сделал такой запрос
SELECT price, currency FROM product LEFT JOIN rates ON rates.curren = product.currency ORDER BY product.price*rates.inrouble;
Но в результате товарные позиции с ценами в валюте сортируются, а в рублях нет.

  Ответить  
 
 автор: GeorgeIV   (23.03.2010 в 09:55)   письмо автору
 
   для: Mookapek   (23.03.2010 в 00:47)
 

В таблицу валют надо добавить рубль с курсом 1

  Ответить  
 
 автор: Trianon   (23.03.2010 в 10:27)   письмо автору
 
   для: GeorgeIV   (23.03.2010 в 09:55)
 

Человеку надо оставлять возможность подумать самому.

Кстати, рубль с курсом 1 - выход не единственный, хотя другие, вероятно, менее оптимальные.

  Ответить  
 
 автор: Mookapek   (24.03.2010 в 00:17)   письмо автору
 
   для: GeorgeIV   (23.03.2010 в 09:55)
 

Да, верно. Спасибо Вам и Трианону.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования