Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > как отсортиробать по определённому паттерну?


Автор: polosatij 21.6.2006, 21:02


прет сем =)

сушествуют следующие поля в базе данных:

SS06
SS05
WS05
WS04
SS04
WS06

как их отсортировать в следующем порядке?

WS04
SS04
WS05
SS05
WS06
SS06

 smile 
пасиба  smile  

Автор: Akina 21.6.2006, 22:24
Поля не сортируют - это бред.

Если же имеется в виду содержимое определенного поля в таблице - то просто создай вспомогательную таблицу
Код
Pattern Order
WS04    1
SS04    2
WS05    3
SS05    4
WS06    5
SS06    6
, свяжи с ней основную таблицу и сорти по полю Order
 

Автор: polosatij 21.6.2006, 22:44
Цитата(Akina @  21.6.2006,  22:24 Найти цитируемый пост)
Поля не сортируют - это бред.



как это бред? я чуть со стула не упал.. как это не сортируют  smile а ORDER BY зачем нужна, или ты ей никогда не пользовалась?


Цитата(Akina @  21.6.2006,  22:24 Найти цитируемый пост)

Если же имеется в виду содержимое определенного поля в таблице - то просто создай вспомогательную таблицу
Выделить всёБез подсветки
1:
2:
3:
4:
5:
6:
7:
    
Pattern Order
WS04    1
SS04    2
WS05    3
SS05    4
WS06    5
SS06    6
, свяжи с ней основную таблицу и сорти по полю Order
  


нормально так предложила.. а как насчёт динамически изменяемых полей? про это забыла? а как насчёт, если завтра кому-то понадобиться ещё какое поле добавить в таблицу?

Добавлено @ 22:45 

неужели никто с такой проблемой не встречался? 

Автор: igorold 22.6.2006, 06:43
Поля действительно не сортируют, сортируют по значению полей ... 
Может тебе это надо:
Код

select right('поле',2) as Ind from 'table' order by Ind;
 

а Akina - это он или ты так прикалываешься? 

Автор: Akina 22.6.2006, 10:19
Цитата(polosatij @  21.6.2006,  23:44 Найти цитируемый пост)
как это бред? я чуть со стула не упал.. как это не сортируют   а ORDER BY зачем нужна

Сортируют записи по значению поля или комбинации полей.

Цитата(polosatij @  21.6.2006,  23:44 Найти цитируемый пост)
как насчёт динамически изменяемых полей?

Значит напиши свою функцию, которая принимает Pattern и возвращает SortingOrder. Типа:
Код
Function SortingOrder(Pattern As String) As Long
SortingOrder = 2 * Val(Right(Pattern, 2))
If Left(Pattern, 1) = "S" Then SortingOrder =SortingOrder +1
End Function 
и используй в запросе
Код
Select MyTable.* From MyTable Order By SortingOrder(MyTable.Pattern)
  

Автор: skyboy 22.6.2006, 11:07
Код

SELECT * FROM test order by right(name,2),left(name,2) desc

Сортирует, как в примере. Однако ты ничего не сказал про способ формирования кодов и какие они бывают. Если только из четырёх символов 2 буквы + 2 цифры, то проблем нет. 

Автор: polosatij 22.6.2006, 19:20
Цитата(igorold @  22.6.2006,  06:43 Найти цитируемый пост)
а Akina - это он или ты так прикалываешься? 


я ошибся.. 


Цитата(skyboy @  22.6.2006,  11:07 Найти цитируемый пост)
код SQL
1:
    
SELECT * FROM test order by right(name,2),left(name,2) desc

Сортирует, как в примере. Однако ты ничего не сказал про способ формирования кодов и какие они бывают. Если только из четырёх символов 2 буквы + 2 цифры, то проблем нет.  



держи +  smile 



Цитата(Akina @  22.6.2006,  10:19 Найти цитируемый пост)
Цитата(polosatij @  21.6.2006,  23:44 Найти цитируемый пост)
как это бред? я чуть со стула не упал.. как это не сортируют   а ORDER BY зачем нужна

Сортируют записи по значению поля или комбинации полей.


сорри.. я ошибся со словом.. живу уже 6 лет в германии..


Цитата(Akina @  22.6.2006,  10:19 Найти цитируемый пост)
начит напиши свою функцию, которая принимает Pattern и возвращает SortingOrder. Типа:
Выделить всёкод Visual Basic
1:
2:
3:
4:
    
Function SortingOrder(Pattern As String) As Long
SortingOrder = 2 * Val(Right(Pattern, 2))
If Left(Pattern, 1) = "S" Then SortingOrder =SortingOrder +1
End Function 
и используй в запросе
Выделить всёкод SQL
1:
    
Select MyTable.* From MyTable Order By SortingOrder(MyTable.Pattern)
   


я никогда не писал на Visual Basic-е.. и попытаюсь понять смысл:

у тебя функция SortingOrder() возвращает Long..
что эквивалентно запросу:

Select MyTable.* From MyTable Order By 100l

эээээээ... я не пойму смысла.. что не правильно я подумал? хм...  smile попытался посмотреть смысл.. но он мне почему-то не понятен.. я пишу на JAVA, C, 4D, PHP.. немного знаю C++.. но вот твой пример мне не понятен..  smile 

хочу понять, можно ли отсортировать вообще как в голову прийдёт..  

Автор: Akina 22.6.2006, 22:53
Цитата(polosatij @  22.6.2006,  20:20 Найти цитируемый пост)
хочу понять, можно ли отсортировать вообще как в голову прийдёт..   

Можно. Либо вспомогательной таблицей (как я указал ранее), либо функцией.
Суть функции - вернуть для каждой записи ее порядок при сортировке. Помнишь, я рисовал вспомогательную таблицу? А вот что вернет написанная мной функция:
Код

Pattern SortingOrder
WS04    8
SS04    9
WS05    10
SS05    11
WS06    12
SS06    13

Значения немного другие, но порядок при сортировке абсолютно тот же.

Т.е. по сути оба этих способа абсолютно вроде бы эквивалентны... разве что таблица быстрее работает, зато функция не жрет памяти базы данных и гибче, ведь она может учитывать и нестационарные позиции, и использовать несколько полей для принятия решения... например сортировку по наименьшему из ASCII-кодов всех байтов строкового поля кроме пробельных никакой таблицей не запрограммить... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)