powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка
21 сообщений из 21, страница 1 из 1
Сортировка
    #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
Сортировка
    #33703264
chernolyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поменяй desc на asc
...
Рейтинг: 0 / 0
Сортировка
    #33703272
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chernolyasпоменяй desc на asc
не понял????
...
Рейтинг: 0 / 0
Сортировка
    #33703345
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from base order by ip desc
...
Рейтинг: 0 / 0
Сортировка
    #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
Сортировка
    #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
Сортировка
    #33703453
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать создать коллекцию и свой компоратор(Comparator). И сортировать как вам угодно.
И еще может в java.net.* уже есть готовая реализация сортировки по ip.
...
Рейтинг: 0 / 0
Сортировка
    #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
Сортировка
    #33703560
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СУБД ORACLE
...
Рейтинг: 0 / 0
Сортировка
    #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
Сортировка
    #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
Сортировка
    #33703901
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнарод вы хоть смотрели как срвниваются строки?

я нет, расскажи пожалусто.
...
Рейтинг: 0 / 0
Сортировка
    #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
Сортировка
    #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
Сортировка
    #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
Сортировка
    #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
Сортировка
    #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
Сортировка
    #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
Сортировка
    #33704274
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636 wrote:
> по гарячи следам еще вопрос, как быть с ортировкой такой фигни:

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

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


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