Сортировка IP-адресов.

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
ABTOPUTET
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 21.05.2003 (Ср) 2:31

Сортировка IP-адресов.

Сообщение ABTOPUTET » 21.05.2003 (Ср) 2:38

Помогите плиз, я уже замучился! В моей БД есть поле IP-адрес, например в нем 5 элементов:
10.0.32.1
10.0.32.2
10.0.32.150
10.0.56.45
10.0.32.21
когда сортирую так:
Base.RecordSource = "select * from users order by users.ip"
выдается что-то вроде
10.0.32.1
10.0.32.150
10.0.32.2
10.0.32.21
10.0.56.45

А мне хотелось бы так:
10.0.32.1
10.0.32.2
10.0.32.21
10.0.32.150
10.0.56.45

то есть чтоб цифры были по возрастанию, причем не только последние, но и сегмент(если больше 100 то он пойдет первым).

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 21.05.2003 (Ср) 6:30

Боюсь может не получится.
Поле неверняка текстовое, вот оно тебе как текст и сортирует.
Можно ip разбивать по блокам и так писать в базу, тогда можно реализовать как ты хочешь. А так не получится.
Moderator VBStreets
---------------------------

ABTOPUTET
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 21.05.2003 (Ср) 2:31

Re: Сортировка IP-адресов.

Сообщение ABTOPUTET » 21.05.2003 (Ср) 13:46

А если допустим я сделаю базу, где будет 4 поля с цифрами ипшника, как мне их лучше потом объединить в таблицу и как лучше сортировать? ведь надо будет потом их соединить в адрес целиком, проставить точки между цифрами и т.п. В программе используется DBGtrid возможно ли сделать это с ней? Чтоб ип показывался в одном поле отсортированный уже

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.05.2003 (Ср) 14:41

Есть два варианта. Первый и оптимальный предложил ASD -- меняешь структуру таблицы. Т.е. вместо одного поля IP у тебя будет четыре: IP1, IP2, IP3, IP4
Тогда запрос будет такой
Код: Выделить всё
select IP1 & '.' & IP2 & '.' & IP3 & '.' & IP4
from ...
order by IP1, IP2, IP3, IP4

Объединение строк я показал через & условно, в разных базах для конкатенции строк используются разные операторы. Кроме того, возможно нужно вначале преобразовать IPx в строку.

Второй вариант проще, но не не столь предпочтителен.
Ничего в структуре не меняешь, просто запоминай как:
010.000.032.001
010.000.032.002
010.000.032.150
010.000.056.045
010.000.032.021
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 71

    TopList