Rechercher : dans
Par :

[SQL] Trié par adresse IP

Dernière réponse le 6 fév 2009 à 15:40:19 afrodje, le 26 nov 2008 à 18:16:30 
 Signaler ce message aux modérateurs

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

1000101 et plus si affinité ;)
Configuration: Windows Vista
Firefox 3.0.4

Meilleures réponses pour « [SQL] Trié par adresse IP » dans :
Comment connaitre son adresse IP ? VoirLes quelques commandes ci-dessous vous permettront de trouver l'adresse IP de votre ordinateur. Connaître son adresse IP Sous Windows 2000 / Windows XP / Windows Vista Sous Windows 95 / Windows 98 Sous Linux Pourquoi certains sites...
Comment changer son adresse IP ? VoirDeux cas possibles Connaître son IP Changer d'IP (cas d'une IP dynamique) Solution alternative : masquer son IP L'adresse IP est une série de chiffres, soit: L'adresse IP que vous utilisez pour vous connecter au routeur (Réseau...
[PHP] Comment afficher l'adresse IP d'un visiteur ? VoirPour afficher l'adresse IP d'un visiteur sur votre site, insérez ce code dans la zone où vous voulez qu'elle s'affiche.
Adresse IP VoirSommaire Qu'est-ce qu'une adresse IP Déchiffrement d'une adresse IP Adresses particulières Les classes de réseaux (obsolète) Classe A Classe B Classe C Attribution des adresses IP Adresses IP réservées Masques de sous-réseau Interet...
Usurpation d'adresse IP (Mystification / Spoofing) VoirL'usurpation d'adresse IP L'« usurpation d'adresse IP » (également appelé mystification ou en anglais spoofing IP) est une technique consistant à remplacer l'adresse IP de l'expéditeur d'un paquet IP par l'adresse IP d'une autre machine. Cette...

1

toto, le 26 nov 2008 à 18:21:10

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.

Répondre à toto

2

afrodje, le 26 nov 2008 à 18:23:17

Le faire en PHP, y a pas de prob, mais je dois le faire en sql... 1000101 et plus si affinité ;)

Répondre à afrodje

5

toto, le 26 nov 2008 à 18:34:58

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 ?

Répondre à toto

3

Nuk, le 26 nov 2008 à 18:29:30

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.

Répondre à Nuk

4

afrodje, le 26 nov 2008 à 18:31:16

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
1000101 et plus si affinité ;)

Répondre à afrodje

6

Nuk, le 26 nov 2008 à 18:40:03

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.

Répondre à Nuk

7

Droopy_, le 26 nov 2008 à 20:11:00

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...

Répondre à Droopy_

8

afrodje, le 29 nov 2008 à 17:47:30

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 

1000101 et plus si affinité ;)

Répondre à afrodje

9

 Schiver, le 6 fév 2009 à 15:40:19
  • +1

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... ;-)

Répondre à Schiver