2013-03-20 52 views
1

我在同一個表中有很多來自MySQL的ip地址,ip是不同的分段。Mysql按部分字符串排序OR符號後一些int

我希望選擇這樣的結果。 如何使用順序?

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 

In Now Mysql_query like this。

192.168.1.1 
192.168.1.10 
192.168.1.111 
192.168.1.2 
192.168.1.23 
192.168.1.25 
.... 
+0

我會感到驚訝,如果是一個真正優雅的解決方案,你可以把4個部分IP的分成四個單獨的列。 – Adder 2013-03-20 15:17:46

+0

檢查這個答案:http://stackoverflow.com/a/8999436/1618257 – 2013-03-20 15:18:56

+1

檢查了這一點http://stackoverflow.com/questions/8719945/order-by-numbers-help-me-sort-ip-addresses – 2013-03-20 15:19:54

回答

0

我看起來像一個重複的問題,見上文(order by.... numbers? Help me sort ip addresses)Legendinmaking的評論。

波蘭王子及其後的作品,但基於以前的帖子,我會建議這樣的:

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 demo

請注意,這是基於波蘭王子他的SQL小提琴和Legendinmaking的評論。

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 

See the demo