Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как отсортиробать по определённому паттерну? > WS04, SS04, WS05, SS05, WS06, SS06 
V
    Опции темы
polosatij
  Дата 21.6.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: нет
Всего: 8





прет сем =)

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

SS06
SS05
WS05
WS04
SS04
WS06

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

WS04
SS04
WS05
SS05
WS06
SS06

 smile 
пасиба  smile  


--------------------
PM   Вверх
Akina
Дата 21.6.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Поля не сортируют - это бред.

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
polosatij
Дата 21.6.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: нет
Всего: 8



Цитата(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 

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


--------------------
PM   Вверх
igorold
Дата 22.6.2006, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 5
Всего: 17



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

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

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

Это сообщение отредактировал(а) igorold - 22.6.2006, 06:46


--------------------
... у семи нянек 14 сисек ...  
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
Akina
Дата 22.6.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(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)
  


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
skyboy
Дата 22.6.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Код

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

Сортирует, как в примере. Однако ты ничего не сказал про способ формирования кодов и какие они бывают. Если только из четырёх символов 2 буквы + 2 цифры, то проблем нет. 
PM MAIL   Вверх
polosatij
Дата 22.6.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: нет
Всего: 8



Цитата(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 

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


--------------------
PM   Вверх
Akina
Дата 22.6.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



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

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

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

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

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0806 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.