Vamos a ver como ordenar IPs obtenidas desde MySQL en formato string de la siguiente forma:
- 127.0.0.1
- 127.0.0.2
- 127.0.0.3
- 127.0.0.4
- 127.0.0.5
- 127.0.0.6
- 127.0.0.7
- 127.0.0.8
- 127.0.0.9
- 127.0.0.10
- 127.0.0.11
Y así sucesivamente. El problema del ordenamiento de IPs surge en la consulta MySQL, al querer ordenar las IPs mediante un ORDER BY la consulta nos manda las IPs semi ordenadas. Entonces vamos a hacer lo siguiente:
Supongamos que tenemos la siguiente tabla en la base de datos:
Tabla ips
id : integer
ip : varchar
Entonces hacemos la consulta para traer todas las IPs:
$consulta = mysql_query(“SELECT * FROM ips”);
Luego recorremos la consulta y hacemos lo siguiente:
$i = 0;
while($ip = mysql_fetch_assoc($consulta)){
$ips[$i] = $ip['ip'];
$ipp = explode(“.”, $ip['ip']);
$ipn[$i] = $ipp[0]*1000000000 + $ipp[1]*1000000 + $ipp[2]*1000 + $ipp[3];
unset($ipp);
$i++;
}
Por último ordenamos las IPs:
array_multisort($ipn, SORT_ASC, SORT_NUMERIC, $ips);
Listo ahora tenemos en $ips nuestras IPs ordenadas correctamente!!
Etiquetas: mysql, ordenar ips, PHP
29/04/2009 a las 10:32 pm |
Buena mancho! Nunca se me había planteado la necesidad pero veo el problema.
Otra sería tenerlas almacenadas en la DB como
tabla_ip [parte1,parte2,parte3,parte4] (Pero eso sería si se puede cambiar el diseño dela DB).
Con eso harías
SELECT parte1,parte2,parte3,parte4
FROM tabla_ip
ORDER BY parte1,parte2,parte3,parte4;