[PHP/MySQL] IP adressen in database ordenen

Pagina: 1
Acties:

  • Mini-me
  • Registratie: November 1999
  • Niet online
Ik log ip's van bezoekers in mijn database. Het IP veld is van het type varchar(15). Wil ik vervolgens de database lezen (gesorteerd op ip) dan krijg ik een resultaat wat op het volgende lijkt:
1.1.1.1
1.1.18.1
1.1.2.1
terwijl ik graag zou hebben:
1.1.1.1
1.1.2.1
1.1.18.1

Is er een andere oplossing hiervoor dan de 4 groepen van cijfers met nullen aan te vullen voordat ze in de database gezet worden, zodat het ordenen wel gaat?

  • goalgetter
  • Registratie: Juni 1999
  • Laatst online: 25-08 15:24
PHP kent een "natural sort". Die kan dit wel. Even in de PHP manual zoeken. Of mysql ook zo'n soort functie kent kan ik je niet zo vertellen.

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

je kan ook $ip = ip2long($ip); doen, ze in de database schrijven, en later weer $ip = long2ip($ip); doen

mijn T.net systeemspecspagina


  • Mini-me
  • Registratie: November 1999
  • Niet online
Op vrijdag 16 november 2001 17:40 schreef RRX het volgende:
je kan ook $ip = ip2long($ip); doen, ze in de database schrijven, en later weer $ip = long2ip($ip); doen
Om een of andere reden gaat dit niet goed.
De ip's vanaf 128.0.0.0 en hoger hebben een negatiefteken waardoor mysql niet (goed) kan sorteren. Wat kan ik hieraan doen?

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Op zondag 18 november 2001 22:35 schreef Mini-me het volgende:

[..]

Om een of andere reden gaat dit niet goed.
De ip's vanaf 128.0.0.0 en hoger hebben een negatiefteken waardoor mysql niet (goed) kan sorteren. Wat kan ik hieraan doen?
Door het type (32-bits int) op unsigned te zetten.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op vrijdag 16 november 2001 17:40 schreef RRX het volgende:
je kan ook $ip = ip2long($ip); doen, ze in de database schrijven, en later weer $ip = long2ip($ip); doen
Sterker nog, MySQL kent daar ook 2 functies voor:

INET_ATON: converteert een IP adres naar 32 bits integer
INET_NTOA : converteert een 32 bits integer naar IP adres
code:
1
2
INSERT INTO table(ip) VALUES(INET_ATON('169.11.14.1'));
SELECT INET_NTOA(ip) FROM table;

hth

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Mini-me
  • Registratie: November 1999
  • Niet online
Dat klinkt handig.
Ik heb gister alle 1200 entries in mijn database omgezet van ip naar ip2long maar ik denk dat ik ze weer terug ga zetten zodat ik via de MySQL oplossing kan sorteren (scheelt me weer een extra query aangezien ik nu de ip's tot 128.0.0.0 eerst weergeef (positief longwaarde) en daarna de rest pas (negatief longwaarde)).

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op maandag 19 november 2001 13:38 schreef Mini-me het volgende:
Dat klinkt handig.
Ik heb gister alle 1200 entries in mijn database omgezet van ip naar ip2long maar ik denk dat ik ze weer terug ga zetten zodat ik via de MySQL oplossing kan sorteren (scheelt me weer een extra query aangezien ik nu de ip's tot 128.0.0.0 eerst weergeef (positief longwaarde) en daarna de rest pas (negatief longwaarde)).
unsigned moet ie zijn, niet vergeten :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Mini-me
  • Registratie: November 1999
  • Niet online
Ik probeer nu de ip's via INET_ATON in de db te zetten maar phpMyAdmin geeft deze error:
SQL-query:

INSERT INTO log(ip) VALUES(INET_ATON('169.11.14.1'));
MySQL said: You have an error in your SQL syntax near 'log(ip) VALUES(INET_ATON('169.11.14.1'));' at line 1
Wat gaat er mis? De kolom 'ip' staat ingesteld als unsigned int(32), moet ik soms iets anders proberen?


edit:

Laat maar, ik lees net dat INET_ATON en INET_NTOA pas in versie 3.23.15 zijn ingevoerd en de webserver draait versie 3.22.32 :(

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hmmmm, ziet er toch goed uit...

welke mysql versie heb je?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Mini-me
  • Registratie: November 1999
  • Niet online
Op maandag 19 november 2001 15:24 schreef Mini-me het volgende:
edit:

Laat maar, ik lees net dat INET_ATON en INET_NTOA pas in versie 3.23.15 zijn ingevoerd en de webserver draait versie 3.22.32 :(
:)
Pagina: 1