Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка / 21 сообщений из 21, страница 1 из 1
03.05.2006, 09:31
    #33703177
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Храню ай пи адреса в базе в поле типа варчар, когда вывожу в таблицу и делаю ордер бай айпи, получаю следующее:
Код: plaintext
1.
2.
10.100.1.7
10.100.1.5
10.100.1.2
Начальнику моему не понравилось,сказал, что хочет чтобы было вот так:
Код: plaintext
1.
2.
10.100.1.2
10.100.1.5
10.100.1.7
Как сделать? Спасибо.
...
Рейтинг: 0 / 0
03.05.2006, 10:05
    #33703264
chernolyas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
поменяй desc на asc
...
Рейтинг: 0 / 0
03.05.2006, 10:07
    #33703272
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
chernolyasпоменяй desc на asc
не понял????
...
Рейтинг: 0 / 0
03.05.2006, 10:31
    #33703345
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
select * from base order by ip desc
...
Рейтинг: 0 / 0
03.05.2006, 10:52
    #33703410
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
когда сделал asc, получаю:
Код: plaintext
1.
2.
3.
4.
5.
10.100.101.10
10.100.101.15
10.100.101.20
10.100.10.13
10.100.101.30
10.100.101.40
когда desc:
Код: plaintext
1.
2.
3.
4.
10.108.0.11
10.107.9.70
10.107.9.50
10.107.9.30
10.107.9.20
и тот и тот вариант мне не подходит, мне нужно чтобы сортировка проводилась
по всем октетам
...
Рейтинг: 0 / 0
03.05.2006, 11:01
    #33703438
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
10.100.101.10
10.100.101.15
10.100.101.20
10.100.10.13
10.100.101.30
10.100.101.40
10.100.10.22
Все бы ничего,если бы не записи 10.100.10.22 и 10.100.10.13, по идее они должны идти в начале, а они в середине списка вылазят
...
Рейтинг: 0 / 0
03.05.2006, 11:07
    #33703453
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Можно попробовать создать коллекцию и свой компоратор(Comparator). И сортировать как вам угодно.
И еще может в java.net.* уже есть готовая реализация сортировки по ip.
...
Рейтинг: 0 / 0
03.05.2006, 11:20
    #33703500
pretender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Не поленился созадть таблицу для тестов (использую mySql). Следующий запрос выполненый в MySQL CC: "SELECT * FROM ips order by ip asc", дает следующий результат:

10.100.10.13
10.100.10.22
10.100.101.10
10.100.101.15
10.100.101.20
10.100.101.30
10.100.101.40
10.107.9.20
10.107.9.30
10.107.9.50
10.107.9.70
10.108.0.11

Это ли не искомый результат? Как видим СУБД свою работу делает (или у Вас нет?). Похоже у Вас проблемы с тем средством, которое отображает данные.

Как вы достаете данные из базы? Чем выводите?

И еще не понятно при чем тут Java? В Java есть возможность сортировки элементов массива/коллекции с использованием компаратора: Arrays.sort(Object[], Comparator), но мне кажется, что здесь это лишнее. Для начала надо разобраться с запросом.
...
Рейтинг: 0 / 0
03.05.2006, 11:38
    #33703560
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
СУБД ORACLE
...
Рейтинг: 0 / 0
03.05.2006, 12:30
    #33703685
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Тогда это вопрос для форума Oracle. Как вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table test_ip (ip varchar2( 15 ));
insert into test_ip(ip) values ('10.100.101.10');
insert into test_ip(ip) values ('10.100.101.15');
insert into test_ip(ip) values ('10.100.101.20');
insert into test_ip(ip) values ('10.100.10.13');
insert into test_ip(ip) values ('10.100.101.30');
insert into test_ip(ip) values ('10.100.101.40');
insert into test_ip(ip) values ('10.100.10.22');

select ip                                     
from test_ip
order by lpad(substr(ip,  1 , instr(ip, '.') -  1 ),  3 , '0')||
         lpad(substr(ip, instr(ip, '.',  1 ,  1 ) +  1 , instr(ip, '.',  1 ,  2 ) - instr(ip, '.',  1 ,  1 ) -  1 ),  3 , '0')||
         lpad(substr(ip, instr(ip, '.',  1 ,  2 ) +  1 , instr(ip, '.',  1 ,  3 ) - instr(ip, '.',  1 ,  2 ) -  1 ),  3 , '0')||
         lpad(substr(ip, instr(ip, '.',  1 ,  3 ) +  1 ),  3 , '0');
...
Рейтинг: 0 / 0
03.05.2006, 12:53
    #33703774
Евгений Путилин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
peter6636
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
10.100.101.10
10.100.101.15
10.100.101.20
10.100.10.13
10.100.101.30
10.100.101.40
10.100.10.22
Все бы ничего,если бы не записи 10.100.10.22 и 10.100.10.13, по идее они должны идти в начале, а они в середине списка вылазят
Бляя народ вы хоть смотрели как срвниваются строки? Храни IP адресса не в VARCHAR, а в BIGINT. Тогда сортировка будет нормальная, только перед выводом на экран преобразуй в нужный формат.
...
Рейтинг: 0 / 0
03.05.2006, 13:24
    #33703901
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
авторнарод вы хоть смотрели как срвниваются строки?

я нет, расскажи пожалусто.
...
Рейтинг: 0 / 0
03.05.2006, 13:41
    #33703993
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Denis PopovТогда это вопрос для форума Oracle. Как вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table test_ip (ip varchar2( 15 ));
insert into test_ip(ip) values ('10.100.101.10');
insert into test_ip(ip) values ('10.100.101.15');
insert into test_ip(ip) values ('10.100.101.20');
insert into test_ip(ip) values ('10.100.10.13');
insert into test_ip(ip) values ('10.100.101.30');
insert into test_ip(ip) values ('10.100.101.40');
insert into test_ip(ip) values ('10.100.10.22');

select ip                                     
from test_ip
order by lpad(substr(ip,  1 , instr(ip, '.') -  1 ),  3 , '0')||
         lpad(substr(ip, instr(ip, '.',  1 ,  1 ) +  1 , instr(ip, '.',  1 ,  2 ) - instr(ip, '.',  1 ,  1 ) -  1 ),  3 , '0')||
         lpad(substr(ip, instr(ip, '.',  1 ,  2 ) +  1 , instr(ip, '.',  1 ,  3 ) - instr(ip, '.',  1 ,  2 ) -  1 ),  3 , '0')||
         lpad(substr(ip, instr(ip, '.',  1 ,  3 ) +  1 ),  3 , '0');

Денис спасибо большое.Все работает отлично, только вот в некоторых местах есть проблемки,например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
10.100.101.10
10.100.101.15
10.100.101.20
10.100.10.13
10.100.101.30
10.100.101.40
10.100.10.15
10.100.10.16
10.100.10.17
10.100.101.77
10.100.101.78
10.100.10.20
10.100.10.21
10.100.10.22
10.100.10.23
10.100.10.30
Не могу понять почему 10.100.10.13, 10.100.10.15 и т.д. залетело туда куда не должно было.А так все гуд.
...
Рейтинг: 0 / 0
03.05.2006, 13:49
    #33704026
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Да все вам правильно Евгений Путилин сказал.

Посимвольно строки сравниваются:

Код: plaintext
1.
2.
3.
        String s1 = ".";
        String s2 = "1";
        
        System.out.println(s1.compareTo(s2));

Поэтому и результат такой.

IP в BigInt хранить нужно

192.101.4.0 - 3227845632

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
        String ip = "85.236.31.255";

        String[] bytes = ip.split("\\.");

         long  ipNum =  0 ;

         for  ( int  i= 0 ; i < bytes.length; i++)
          ipNum += Integer.parseInt(bytes[i]) * Math.pow( 256 , bytes.length -  1  - i);

      System.out.println(ipNum);
...
Рейтинг: 0 / 0
03.05.2006, 14:00
    #33704072
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
yelenaДа все вам правильно Евгений Путилин сказал.

Посимвольно строки сравниваются:

Код: plaintext
1.
2.
3.
        String s1 = ".";
        String s2 = "1";
        
        System.out.println(s1.compareTo(s2));

Поэтому и результат такой.

IP в BigInt хранить нужно

192.101.4.0 - 3227845632

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
        String ip = "85.236.31.255";

        String[] bytes = ip.split("\\.");

         long  ipNum =  0 ;

         for  ( int  i= 0 ; i < bytes.length; i++)
          ipNum += Integer.parseInt(bytes[i]) * Math.pow( 256 , bytes.length -  1  - i);

      System.out.println(ipNum);

Ок, тогда еще 2 вопроса:
1) типа BigInt в оракле не нашел, пойдет ли просто int?
2) как мне обратно 3227845632 перевести в айпи и показать в нормальном виде пользователю
...
Рейтинг: 0 / 0
03.05.2006, 14:02
    #33704082
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
peter6636
Не могу понять почему 10.100.10.13, 10.100.10.15 и т.д. залетело туда куда не должно было.А так все гуд.
NLS_SORT наверное. А так - это же числа, ток что можно чуть по-другому, чтобы избежать сравнение строк:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select ip
       -- Для проверки
     , to_number(substr(ip,  1 , instr(ip, '.') -  1 )) x1
     , to_number(substr(ip, instr(ip, '.',  1 ,  1 ) +  1 , instr(ip, '.',  1 ,  2 ) - instr(ip, '.',  1 ,  1 ) -  1 )) x2
     , to_number(substr(ip, instr(ip, '.',  1 ,  2 ) +  1 , instr(ip, '.',  1 ,  3 ) - instr(ip, '.',  1 ,  2 ) -  1 )) x3
     , to_number(substr(ip, instr(ip, '.',  1 ,  3 ) +  1 )) x4
from test_ip
order by to_number(substr(ip,  1 , instr(ip, '.') -  1 ))
       , to_number(substr(ip, instr(ip, '.',  1 ,  1 ) +  1 , instr(ip, '.',  1 ,  2 ) - instr(ip, '.',  1 ,  1 ) -  1 ))
       , to_number(substr(ip, instr(ip, '.',  1 ,  2 ) +  1 , instr(ip, '.',  1 ,  3 ) - instr(ip, '.',  1 ,  2 ) -  1 ))
       , to_number(substr(ip, instr(ip, '.',  1 ,  3 ) +  1 ));
Должно работать. Если нет - покажи результат вывода.
...
Рейтинг: 0 / 0
03.05.2006, 14:21
    #33704159
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
Denis Popov peter6636
Не могу понять почему 10.100.10.13, 10.100.10.15 и т.д. залетело туда куда не должно было.А так все гуд.
NLS_SORT наверное. А так - это же числа, ток что можно чуть по-другому, чтобы избежать сравнение строк:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select ip
       -- Для проверки
     , to_number(substr(ip,  1 , instr(ip, '.') -  1 )) x1
     , to_number(substr(ip, instr(ip, '.',  1 ,  1 ) +  1 , instr(ip, '.',  1 ,  2 ) - instr(ip, '.',  1 ,  1 ) -  1 )) x2
     , to_number(substr(ip, instr(ip, '.',  1 ,  2 ) +  1 , instr(ip, '.',  1 ,  3 ) - instr(ip, '.',  1 ,  2 ) -  1 )) x3
     , to_number(substr(ip, instr(ip, '.',  1 ,  3 ) +  1 )) x4
from test_ip
order by to_number(substr(ip,  1 , instr(ip, '.') -  1 ))
       , to_number(substr(ip, instr(ip, '.',  1 ,  1 ) +  1 , instr(ip, '.',  1 ,  2 ) - instr(ip, '.',  1 ,  1 ) -  1 ))
       , to_number(substr(ip, instr(ip, '.',  1 ,  2 ) +  1 , instr(ip, '.',  1 ,  3 ) - instr(ip, '.',  1 ,  2 ) -  1 ))
       , to_number(substr(ip, instr(ip, '.',  1 ,  3 ) +  1 ));
Должно работать. Если нет - покажи результат вывода.
то что нужно,спасибо
...
Рейтинг: 0 / 0
03.05.2006, 14:33
    #33704202
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
по гарячи следам еще вопрос, как быть с ортировкой такой фигни:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
floor- 1 
floor- 1 
floor- 1 
floor- 1 
floor- 1 
floor- 10 
floor- 10 
floor- 10 
floor- 10 
floor- 10 
floor- 10 
floor- 24 
floor- 24 
floor- 24 
floor- 3 
floor- 3 
floor- 3 
тут уже и буквы есть
...
Рейтинг: 0 / 0
03.05.2006, 14:54
    #33704274
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
peter6636 wrote:
> по гарячи следам еще вопрос, как быть с ортировкой такой фигни:

PL/SQL-функции, наподобе REPLACE, TRANSLATE и т.д. Убирай все лишнее, по остатку
сортируй. Это уже к Java точно не относится.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
03.05.2006, 15:11
    #33704341
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
всем большое спасибо, в особенности Денису
...
Рейтинг: 0 / 0
03.05.2006, 16:21
    #33704594
Евгений Путилин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
wessen авторнарод вы хоть смотрели как срвниваются строки?

я нет, расскажи пожалусто.
исходные файлы открыты смотри не хочу
Код: plaintext
java.lang.String.compareTo
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]