SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 15.06.2010 12:23:02

Crystall
Участник
Зарегистрирован: 08.12.2009
Сообщений: 7

Сортировка по приоритету

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

Недавно у меня возникла проблема, связанная с сортировкой вывода.
Имеется некая база:

+-------------------------------+-----+
|                name           | id  |
+-------------------------------+-----+
|    Семенов Семен Семенович    | 208 |
+-------------------------------+-----+
|      Иванов Иван Иванович     | 316 |
+-------------------------------+-----+
|      Петров Петр Петрович     | 480 |
+-------------------------------+-----+
|  Алексеев Алексей Алексеевич  | 94  |
+-------------------------------+-----+
|    Сергеев Сергей Сергеевич   | 141 |
+-------------------------------+-----+

И условная таблица приоритетов (соответствий) (существующая только на бумаге):

+-----+-----+
|  x  |  y  |
+-----+-----+
| 94  |  1  |
+-----+-----+
| 480 |  2  |
+-----+-----+
| 208 |  3  |
+-----+-----+
| 141 |  4  |
+-----+-----+
| 316 |  5  |
+-----+-----+

Требуется сделать запрос из первой базы, как бы заменить значения поля ID по второй таблице (x -> y), отсортировать по возрастанию и заменить значения обратно (y -> x).

В итоге должно получиться это:

+-------------------------------+-----+
|                name           | id  |
+-------------------------------+-----+
|  Алексеев Алексей Алексеевич  | 94  |
+-------------------------------+-----+
|      Петров Петр Петрович     | 480 |
+-------------------------------+-----+
|    Семенов Семен Семенович    | 208 |
+-------------------------------+-----+
|    Сергеев Сергей Сергеевич   | 141 |
+-------------------------------+-----+
|      Иванов Иван Иванович     | 316 |
+-------------------------------+-----+

Теперь вопрос: можно ли как-то это выполнить средствами MySQL? Желательно без создания таблицы соответствий, заменяя значения "на лету". Или же обойтись без замен вообще, выставляя приоритеты вывода прямо в запросе.

Заранее спасибо, с уважением, Crystall.

Неактивен

 

#2 15.06.2010 13:33:49

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

Re: Сортировка по приоритету

Можно, выставляя приоритеты вывода прямо в запросе smile

select * from tablename order by if(id=94,1,if(id=480,2,if(id=208,3,if(id=141,4,if(id=316,5,id)))));

Неактивен

 

#3 15.06.2010 13:57:31

Crystall
Участник
Зарегистрирован: 08.12.2009
Сообщений: 7

Re: Сортировка по приоритету

vasya, спасибо большое! Который раз ваши советы помогают мне решить, казалось бы, совсем не поддающиеся логике задачи smile

РЕШЕНИЕ НАЙДЕНО, работает отлично. Thnx to vasya

Отредактированно Crystall (15.06.2010 14:02:58)

Неактивен

 

#4 15.06.2010 16:34:39

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Сортировка по приоритету

Это конечно прекрасное решение, но когда приоритетов будет не 5 а 30 будет уже очень несладко smile

Сделайте лучше еще одну таблицу и вносите в нее изменения, а выбирайте так

SELECT data.name, priorities.x FROM
data JOIN priorities ON data.id = priorities.y
ORDER BY x
 


UPD. не заметил пожелания "без таблицы соответствий" - а с чем это свзано интересно?

Отредактированно Shopen (15.06.2010 16:37:01)

Неактивен

 

#5 15.06.2010 23:48:06

Crystall
Участник
Зарегистрирован: 08.12.2009
Сообщений: 7

Re: Сортировка по приоритету

Shopen, благодарствую за ещё один вариант решения данной проблемы smile Но всё дело в том, что база данных является критичной для программы, и не хотелось бы вносить в неё какие-либо изменения. Хотя, конечно, было бы намного удобнее и проще. В любом случае, спасибо! Любой другой, столкнувшийся с подобной задачей, будет рад узнать, что существует как минимум два пути решения smile

Отредактированно Crystall (15.06.2010 23:48:21)

Неактивен

 

Board footer

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