INET_ATON fonksiyonunu deneyin istiyoruz verir
SELECT ip FROM sn_192_168_0
ORDER BY INET_ATON(ip);
Bunu bir deneyin!
CAVEAT: INET_ATON değerlerini depolamak en iyisidir. Bu işleve sahip bazı geçmiş tuhaflıklar var, noktalar arasında geçersiz sayılar var ve bunları tetikleyiciler olarak çağırıyorsunuz. http://bugs.mysql.com/bug.php?id=5448 Bu hataları şimdi temizlediğini
http://bugs.mysql.com/bug.php?id=39386
- .
Kısa IP adresleri doğru şekilde işleniyor. İşte 7
mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
+------------------------+--------------------+
| INET_ATON('127.0.0.1') | INET_ATON('127.1') |
+------------------------+--------------------+
| 2130706433 | 2130706433 |
+------------------------+--------------------+
1 row in set (0.05 sec)
ip maksimum uzunluğu olduğunu Şu an tam bir örnek, ama yaptığı gibi görünen şey sözlükbilimsel (yani karakter karakterini) sıralamaktır. Sayısal olarak sıralamak için bir SP (veya uygulama mantığı) oluşturmanız gerekir (yani IP adresini dört parçaya ayırın, ardından her bir parçaya göre sıralayın). Alternatif olarak, onu dört kısma ayırmak yerine, IP adresinden tek bir tam sayı yapın (adresin ilk sekizli sayısı = sayının ilk 8 biti, ikinci sekizli = ikinci 8 bit vb.) Ve buna göre sıralayın - IP adresleri aslında iyi gizlenmiş bir tam sayıdan başka bir şey değildir. –
@SimonRigharts tam olarak ne yapıyor. Genel felsefe, her şeyi çok sayıdaki bir alana çevirmek (veya 3 karakterlik genişlikte dört yeni alan veya üç yeni bayt alanı kullanmak) ve sıralama için değil de bunu sorgulamak için daha hızlı (ama daha fazla alan pahalı) olacaktı. Bu alan görüntüleme amaçlıdır. Kendinizi ayrıştırmak istemiyorsanız, IP adresini sayısal alana dönüştürmek için kütüphaneler vardır. – jcolebrand
Ancak, bu gerçekten sadece bir kod sorusu olduğundan, [SO] 'ya yeniden önyükleme yapıyor. – jcolebrand