1

我在同一张表中有很多来自 MySQL 的 ip 地址,ip 是不同的段。

我希望选择这样的结果。如何使用 order by ?

192.168.1.1
192.168.1.2
192.168.1.10
192.168.1.111
192.168.1.23
192.168.1.25
192.168.20.1
192.168.20.31
192.168.20.25
192.168.35.2
192.168.35.21
192.168.35.125

在现在这样的 Mysql_query 中。

192.168.1.1
192.168.1.10
192.168.1.111
192.168.1.2
192.168.1.23
192.168.1.25
....
4

2 回答 2

0

像这样的东西...

SELECT v.ip 
FROM   (SELECT ip, 
               CAST(Substring_index(ip, '.', 1) AS UNSIGNED INTEGER)  first, 
               CAST(Substring_index(Substring_index(ip, '.' 
                   , 2 ), '.', -1) AS UNSIGNED INTEGER)               second, 
               CAST(Substring_index(Substring_index(ip, '.' 
                   , -2 ), '.', 1) AS UNSIGNED INTEGER)               third, 
               CAST(Substring_index(ip, '.', -1) AS UNSIGNED INTEGER) fourth 
        FROM   ips) v 
ORDER  BY v.first, 
          v.second, 
          v.third, 
          v.fourth

查看演示

于 2013-03-20T15:17:40.680 回答
0

我看起来像一个重复的问题,请参阅上面 Legendinmaking 的评论(按....数字排序?帮我对 IP 地址进行排序)。

波兰王子的帖子有效,但根据之前的帖子,我建议这样做:

SELECT ip 
FROM   ips
ORDER BY INET_ATON(ip);

样本数据:

CREATE TABLE ips
    (`ip` varchar(14));

INSERT INTO ips
    (`ip`)
VALUES
    ('192.168.35.2'),
    ('192.168.35.21'),
    ('192.168.1.1'),
    ('192.168.1.2'),
    ('192.168.35.125'),
    ('192.168.1.23'),
    ('192.168.1.25'),
    ('192.168.20.1'),
    ('192.168.20.31'),
    ('192.168.1.10'),
    ('192.168.1.111'),
    ('192.168.20.25');

SQL FIDDLE 演示

请注意,这是基于波兰王子的 SQL Fiddle 和 Legendinmaking 的评论。

于 2013-03-20T16:41:27.100 回答