Téléchargement
illégal
Posez votre question Signaler

[SQL] Trié par adresse IP [Résolu]

afrodje 897Messages postés 7 février 2008Date d'inscription 23 avril 2012Dernière intervention - Dernière réponse le 6 févr. 2009 à 15:40
Bonjour,
Je ne trouve pas comment trier dans un orde croissant un champ qui contient des adresses IP:
par exemple actuellement :
192.168.1.1
192.168.1.100
192.168.1.122
192.168.1.20
192.168.1.251
192.168.1.30

Alors que je voudrais avoir :
192.168.1.1
192.168.1.20
192.168.1.30
192.168.1.100
192.168.1.122
192.168.1.251

Merci
Lire la suite 

[SQL] Trié par adresse IP »

9 réponses
Réponse
+1
moins plus
Voila la solution :


SELECT 
CONVERT(SUBSTRING_INDEX(adresse_ip, '.', 1), UNSIGNED INTEGER) as nb1,
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(adresse_ip, '.', 2), '.', -1), UNSIGNED INTEGER) as nb2,
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(adresse_ip, '.', -2), '.', 1), UNSIGNED INTEGER) as nb3,
CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(adresse_ip, '.', -2), '.', -1), UNSIGNED INTEGER) as nb4,
adresse_ip
from table1
ORDER BY nb1,nb2,nb3,nb4 

Schiver- 6 févr. 2009 à 15:40
Il y a beaucoup plus simple. J'ai trouvé sur un site qu'une solution en deux lignes existe... Je l'ai testé pour vérifié mais tout fonctionne parfaitement...


mysql> SELECT INET_ATON(adresseIP)AS bin_ip, adresseIP
-> FROM plageadresseip
-> ORDER BY bin_ip;

qui donnera le résultat suivant :

+------------------+---------------+
| bin_ip | adresseIP |
+------------------+---------------+
| 1124767601 | 67.10.151.113 |
| 1146676993 | 68.88.231.1 |
| 1146676994 | 68.88.231.2 |
| 1146676995 | 68.88.231.3 |
| 1146677002 | 68.88.231.10 |
| 1146677014 | 68.88.231.22 |
| 1146677015 | 68.88.231.23 |
| 1146677016 | 68.88.231.24 |
| 1146677017 | 68.88.231.25 |
| 1146677018 | 68.88.231.26 |
| 1146677019 | 68.88.231.27 |
| 1146677020 | 68.88.231.28 |
| 1146677021 | 68.88.231.29 |
| 1146677022 | 68.88.231.30 |
+------------+---------------+

Pour ne pas afficher la colonne bin_ip, il faut juste appliquer la requête de cette manière :

SELECT adresseIP
FROM plageadresseip
ORDER BY INET_ATON( adresseIP );


La fonction INET_ATON (ATON = Adresse TO Number) est très efficace...
Une autre fonction existe qui permet de faire le processus inverse... elle s'appelle très logiquement INET_NTOA... ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour

Tu es obligé de décomposer l'adresse en 4 champs numériques. Le détail de la syntaxe dépend totalement du langage que tu utilises pour faire ce tri.
Bien sûr, si tu travailles toujours sur le sous-réseau 192.168.1.x, extraire le dernier champ peut suffire.
afrodje- 26 nov. 2008 à 18:23
Le faire en PHP, y a pas de prob, mais je dois le faire en sql...
toto - 26 nov. 2008 à 18:34
En mysql, il y a la fonction SUBSTRING_INDEX(str,delim,count) qui permettrait d'extraire les 4 parties de l'adresse (laborieusement, mais ça doit être faisable. Il y a peut-être un équivalent SQL ?
Ajouter un commentaire
Réponse
+0
moins plus
Bonsoir,

Essaye un truc du genre


Select * from monchamp order by monchamp ASC;

A moins que je me fourvoie completement et que je t'ai pris pour un debutant...
Si c'est le cas je m'en excuse.
afrodje- 26 nov. 2008 à 18:31
C'est le cas ;)

Le trie croissant (donc avec ASC) donne ce résultat :

192.168.1.1
192.168.1.100
192.168.1.122
192.168.1.20
192.168.1.251
192.168.1.30
Ajouter un commentaire
Réponse
+0
moins plus
Autant pour moi.^^

Tu veux classer par nombre et non pas par le premier chiffre..J'avais mal lu les resultats de requêtes.

Hum j'ai deja fait la manip mais c'etait y'a un moment et mes conaissances sql se sont etiolées....Jvais essayer de faire un effort de memoire mais je garantis rien.
Ajouter un commentaire
Réponse
+0
moins plus
J'ai trouvé ça sur SQL server, mais ça marche pas tel quel sur MySQL :
http://www.sql-server-helper.com/tips/sort-ip-address.aspx

Ça peut être une base pour rechercher...
Ajouter un commentaire
Ce document intitulé « [SQL] Trié par adresse IP » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?