SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.09.2007 17:13:29

gregzem
Участник
Зарегистрирован: 02.07.2007
Сообщений: 10

SELECT ... LIMIT + сортировка = проблема.

Здравствуйте,

есть таблица

ID    Cost       Currency
------------------------------
1      1000        RUR
2      2000        EUR
3      1000        USD
4      2000        EUR
5      250          EUR
6      300          USD
...

Всего более 3000 записей.

Делаю постраничную навигацию по данной таблице с выдачей записей по 10 на странице. Сложность заключается в том, что выборка должна быть отсортирована по возрастанию цены с учетом пересчета курса валют (курс меняется). Поскольку записей более 3000, их приходится извлекать порциями. Только те, которые отображаются на странице. То есть LIMIT <начальный элемент>, 10. Без LIMIT я сортировку сделал (пример запроса):

SELECT * FROM Table WHERE ((Cost BETWEEN 0 AND 258400) AND Currency = 'RUR') OR ((Cost BETWEEN 0 AND 10000) AND Currency = 'USD') OR ((Cost BETWEEN 0 AND 7423) AND Currency = 'EUR') ORDER BY Cost. А потом сортируем уже внутри скрипта на PHP. Но видится мне это решение через одно место. Хотя работает. Но вот с добавлением LIMIT сортируются только значения внутри извлеченных 10 элементов. Без учета кросскурса.

Есть идеи, как сделать SELECT, чтобы учитывался кросскурс, и можно было извлекать порциями?

Неактивен

 

#2 04.09.2007 17:41:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: SELECT ... LIMIT + сортировка = проблема.

Вы выполняете сортировку в PHP, для этого Вам необходимо вытаскивать всю таблицу из базы. Если Вы хотите сортировку выпонять в MySQL, то введите курсы в запрос

Код:

SELECT ID, Cost, Currency, IF(Currency='RUR', Cost, IF(Currency='EUR', Cost*34.4, IF(Currency='USD', Cost*25.5, 'Unknown') ) ) rub_cost from table_name order bu rub_cost asc limit 10,20;

Неактивен

 

#3 04.09.2007 18:18:42

gregzem
Участник
Зарегистрирован: 02.07.2007
Сообщений: 10

Re: SELECT ... LIMIT + сортировка = проблема.

Спасибо, это то, о чем я хотел узнать

Неактивен

 

#4 04.09.2007 18:24:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: SELECT ... LIMIT + сортировка = проблема.

MySQL сначала выполняет ORDER BY, а затем LIMIT.
В Вашем случае ошибка возникает потому, что вы делаете сортировку с учетом кроскурса в PHP.

Вариант решения:

Код:

SELECT id,
CASE currency
  when 'rur' then cost/25.84
  when 'usd' then cost
  when 'eur' then cost/0.7423
END as cost_usd,
currency FROM table_name ORDER BY cost_usd LIMIT 10,20;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson