Les explico el problema que he tenido ultimamente.
Realize un Script, que se conecta via socket hacia un servidor de juegos (Quake2), en el cual realiza una consulta rcon status y obtiene datos de los jugadores que estan jugando en el servidor. Esa informacion la guardo en una bd MySQL. Via cron se ejecuta cada 5 minutos.Entonces de esta forma tenemos un sistema completo de Log del servidor del juego.
Entonces si yo entro a jugar en el servidor, y juego durante media hora, tendre 6 registros anotados.
La base de datos tiene la siguiente estructura
id|servidor|ip|name|score|ping|ver|rate|mapa|hora
Por supuesto que el Script que hace consultas la BD, Pagina los resultados, tiene un buscador con comodines (Para buscar por IP, Nick,etc).
Entonces una misma IP tiene muchos registros, pero es importante, ya que nos interesa los nick que usa cada jugador.
El sistema ha funcionado muy bien,nos ha permitido saber que hay muchos jugadores que juegan por mas un clan en nuestra Comunidad de Action Quake 2.
El sistema lleva online ya casi 2 meses, tenemos 120.000 registros y pesa 12 MB :O :O.
Ahora necesitamos hacer un script que analize todos los registros de la base de datos (mas que nada las IP) y anote todos los nick que ha usado una IP.
Código PHP:
<?
include('../php/mysql.php');
function buscar($ip,$matriz)
{ // Buscamos el ip dentro de la matriz
$c='0';
for ($i=0;$i<count($matriz);$i++)
{
if ($ip == $matriz[$i])
{
$c++;
}
}
if ($c == '0' )
{
return('0');
}
else
{
return(true);
}
}
$sql="SELECT `ip` FROM `aq2logservers`";
$result = mysql_query($sql);
$k=0;
while ($row = mysql_fetch_row($result))
{
if (buscar($row[0],$ipgrabadas))
{
}else
{ // Entro
$ipgrabadas[$k]=$row[0];
$k++;
}
}
// Tenemos Todas las IP grabadas distintas
for ($i=0;$i<count($ipgrabadas);$i++)
{
$sql="SELECT `name` FROM `aq2logservers` WHERE `ip` LIKE CONVERT( _utf8 '".$ipgrabadas[$i]."'
USING latin1 ) COLLATE latin1_swedish_ci";
$result = mysql_query($sql);
$k=0;
echo 'IP:'.$ipgrabadas[$i].'<br>';
while ($row = mysql_fetch_row($result))
{
if (buscar($row[0],$nicktemporales))
{
}else
{ // Entro
$total[$k][0]=$ipgrabadas[$i];
$nicktemporales[$k]=$row[0];
$total[$k][1]=$total[$k][1]."|".$row[0];
$k++;
echo ''.$row[0].'<br>';
}
}
$nicktemporales="";
echo '<br><br><br>';
}
?>
Entonces el resultodo es
$total[0][0] Seria la IP
$total[0][1] Lista de todos los nick que uso tal IP
Funciona super bien si inicialmente limito el numero de registro de 0 1000 o 2000, pero mas de eso el script es eterno en el servidor y sobrepasa los 30sec.
Entonces necesito ideas para optimizar el script, para realizar todo ese proceso, sin que sobrepase el tiempo maximo de ejecucion de un script.
O solo me queda la opcion de mover la bd de ami computador personal y aplicar el script y que trabaje eternamente hasta cuando termine hahaah (ya que localmente no tengo limitado el tiempo de ejecucion de un script).
Saludos amigos