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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по сортировки, MySQL 
:(
    Опции темы
MaxB
  Дата 20.5.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.2.2004
Где: Украина, Одесса

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



Привет всем!

Есть ли возможность заставить оператор 
Код

select * from xxx order name
 сортировать сначала кирилицу, а потом только латиницу. Т.е. сначало чтоб шли А-Я, а потом только A-Z  и цифры.
Если нет. То как это оптимальнее реализовать.

Заранее благодарен.
PM MAIL WWW ICQ   Вверх
bars80080
Дата 20.5.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



по-моему, такие спец порядки только на программном языке, с которого запрос идёт, имхо
PM MAIL WWW   Вверх
Magnifico
Дата 20.5.2008, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прикладная задача у тебя есть строковое поле с Первыми буквами англиского, Русского и  цифры

Код

create temporary table test
(
id int not null AUTO_INCREMENT,
name varchar(10),
PRIMARY KEY (id)
)
insert into test

select 1,'A'  union all
select 2,'B'  union all
select 3,'C'  union all
select 4,'D'  union all
select 5,'E'  union all
select 6,'1'  union all
select 7,'2'  union all
select 8,'3'  union all
select 9,'4'  union all
select 10,'5'  union all
select 11,'А'  union all
select 12,'Б'  union all
select 13,'В'  union all
select 14,'Г'  union all
select 15,'Д'  


Код

select * from test 
order by 
# русский алфавит 33 буквы
case when name like  'А%'  then 1
        when name like  'Б%'  then 2 
        when name like  'В%'  then 3 
        when name like  'Г%'  then 4
       when name like  'Д%'  then 5
# и так далее до 33

# английски алфавит  26 букв
        when name like  'A%'  then 34
        when name like  'B%'  then 35 
        when name like  'C%'  then 36
        when name like  'D%'  then 37 
        when name like  'E%'  then 38 
# и так далее до 60

# цифры всего 10   от 0 до 9
    when name like  '0%'  then 61
            when name like  '1%'  then 62 
            when name like  '2%'  then 63
    when name like  '3%'  then 64 
    when name like  '4%'  then 65
    when name like  '5%'  then 66
    when name like  '6%'  then 67
end



и конечно делаешь из этого фукцию с полным алфавитом и соответсвием цифр
и применяешь в   order by  фунМояСортировка(name)


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Feldmarschall
Дата 20.5.2008, 20:34 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 3
Всего: 32



Magnifico, думаю, такое решение представляет исключительно академический интерес, и не имеет никакой связи с реальностью.
А для реальной работы - делать свой collation set. Вот только врядли автор обладает такими правами в настройке БД.
PM   Вверх
MaxB
Дата 21.5.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.2.2004
Где: Украина, Одесса

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



Magnifico, спасибо.  smile 
Но по моему мнению Feldmarschall, прав. При каждом запросе страници так сортировать, мне не какого хостинга не хватит, а если ето не буквы а целые слова. 
Я полагаю, что необходимо ввести еще одно поле "order", потом запросом
Код

set @c:=0;
UPDATE jos_mb_video 
SET `order`=(SELECT @c:=@c+1) 
WHERE LEFT(jos_mb_video.name_video_rus,1) REGEXP '^([А-Я]|[а-я])' ORDER BY `name_video_rus`;
UPDATE jos_mb_video 
SET `order`=(SELECT @c:=@c+1) 
WHERE LEFT(jos_mb_video.name_video_rus,1) REGEXP '^([A-Z]|[a-z])' ORDER BY `name_video_rus`;
UPDATE jos_mb_video 
SET `order`=(SELECT @c:=@c+1) 
WHERE LEFT(jos_mb_video.name_video_rus,1) REGEXP '^([0-9])' ORDER BY `name_video_rus`;

заполнить его.
При каждом запросе страницы сортировать по полю `order`, а его сделать как индекс.
Может есть еще способы. Feldmarschall,  можно по потробней про collation set.




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


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


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

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



Цитата(MaxB @  21.5.2008,  12:11 Найти цитируемый пост)
можно по потробней про collation set

http://dev.mysql.com/doc/mysql/search.php?...tml&lang=en


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

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


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 3
Всего: 32



порядок сортировки хранится в XML файле
насколько я понимаю, его вполне можно подправить ручками так, как хочется.
но, разумеется, только имея административный доступ к серверу


Это сообщение отредактировал(а) Feldmarschall - 21.5.2008, 12:10
PM   Вверх
MaxB
Дата 21.5.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 10.2.2004
Где: Украина, Одесса

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



Спасибо, буду разбираться. smile 
PM MAIL WWW ICQ   Вверх
bars80080
Дата 21.5.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



оффтоп наверно

интересно, однажды у меня был факт, что при довольно большом числе выборок всплыла такая проблема, что сопоставляя значения с русскими символами ( where field='аб' ), запросы довольно сильно тормозили. тогда я ввёл дополнительное поле с тем же словом, но url-кодированное. скорость резко повысилась и стал искать по нему.


мож у меня просто БД старая...

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


 




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


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

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