Вопрос про сортировку

Morf

Guest
Вопрос про сортировку

Ситуация выглядит следующим образом:

есть база товаров, но цена может быть представлена в долларах или рублях либо договорная.
в базе используется три поля: priceUSD priceRUB и priceDOG

вопрос:
как сделать, чтобы когда пользователь выбирал сортировку по цене, производилась сортировка именно по обоим ценам?

база MySQL
 

Morf

Guest
Автор оригинала: Paxan
ORDER BY field1, field2,....
?
Это то ясно, но товар имеет цену либо в доллрах либо в рублях, и если таким образом делать сортировку то не получится ли то что исходя из курса доллара будет сделана неверная сортировка, как решить проблему?
 

slip

Guest
создаешь дополнительное поле где указываешь тип валюты, пишешь WHERE type = 'RU' AND type = 'EN' ORDER BY....
если я тебя правильно понял...
 

alpine

Новичок
Morf
Объсни зачем это нужно?!
Ведь у тебя например priceUSD = priceRUB *курс тоесть они пропорциональны и поэтому по барабану по какому сортировать.
Если по двум то сортируется сначала по первому указаному полю а если есть одинаковые то с учетом вторго указаного.
Теперь объясни свой алгоритм сортировки. :)
 

Morf

Guest
Автор оригинала: alpine
Morf
Объсни зачем это нужно?!
Ведь у тебя например priceUSD = priceRUB *курс тоесть они пропорциональны и поэтому по барабану по какому сортировать.
Если по двум то сортируется сначала по первому указаному полю а если есть одинаковые то с учетом вторго указаного.
Теперь объясни свой алгоритм сортировки. :)
Смысл такой, что у меня забит алгоритм, что если пустое поле priceUSD, то товар отображается с ценой в рублях и наоборот, т.е. алгоритм проверяет пустое ли поле и на этом основании выводит цену соответственно, поэтому каждая запись имеет только одно заполненное поле либо priceUSD, либо PriceRUB

ну и вот как плясать если есть 2 записи у одной из которых указана цена в долларах, т.е. priceUSD=2000 и priceRUB=0, а другая запись - priceUSD=0 и priceRUB=45000

каков должен быть запрос чтобы он отсортировал это дело правильным образом?
 

alpine

Новичок
Morf
А если не допускать чтобы у тебя было priceRUB=0 или priceUSD=0 путем пересчета по курсу(Если это тебе так важно)?

-~{}~ 18.07.05 00:10:

Morf
Это то ясно, но товар имеет цену либо в доллрах либо в рублях, и если таким образом делать сортировку то не получится ли то что исходя из курса доллара будет сделана неверная сортировка, как решить проблему?
Слушай а хранить все в одной валюте никак а?
 

yugene

Отошел от дел
Morf,

1. у тебя может быть заполнено два или три этих поля одновременно?

2. если поле не заполнено, оно =0 или IS NULL?
 

Morf

Guest
Автор оригинала: yugene
Morf,

1. у тебя может быть заполнено два или три этих поля одновременно?

2. если поле не заполнено, оно =0 или IS NULL?
нет, поле токо одно может быть заполнено, поле если не заполнено, то равно 0
 

alpine

Новичок
Morf
Можно в запросе создать виртуальное поле которое ты не будешь выводить но в котром будут все цены в одной валюте и выполнять сортировку именно по нему не зависимо от полей priceUSD и priceRUB а учитываю только их направление сортировки.

Создавать его нужно из следующих соображений:
1) В этом поле все должно быть в одной валюте, основной.
2) Если поле равно нулю смотрим значение в другой валюте если оно не равно нулю переводим в текущую валюту по курсу
3) Если в другой валюте цена равна нулю то записываем ноль

создается оно примерно так
[sql]
SELECT *,
CASE WHEN priceRUB <> 0 THEN priceRUB WHEN priceUSD <> 0 THEN (priceUSD*_КУРС_) ELSE 0 END AS for_order
FROM
table_name
ORDER BY for_order
[/sql]
 
Сверху