Programación Web y Scripting > PHP
Netoffice
gnfrs:
Hola, hace mucho que no posteo en el foro, pero ví algo que realmente me llamó mucho la atención y no pude evitar postearlo...
Para los que no lo conocen, el netoffice es un software libre, desarrollado en PHP. Sirve para administrar proyectos, con sus incidencias (tareas), fechas de entrega, etc...
Lo que ví fue impresionante, el archivo library.php, que creo es el corazón del sistema tiene una función como esta:
--- Código: Text --- /** * Count total results from a request * * @param string $tmpsql Sql query * @access public */function compt($tmpsql){ global $tableCollab, $databaseType, $countEnregTotal, $comptRequest; $comptRequest += 1; if ($databaseType == 'mysql') { $res = openDatabase(); $sql = $tmpsql; $index = mysql_query($sql, $res); while ($row = mysql_fetch_row($index)) { $countEnreg[] = ($row[0]); } $countEnregTotal = count($countEnreg); @mysql_free_result($index); @mysql_close($res); } return($countEnregTotal);}
¿ A alguien se le ocurre alguna mejor forma de hacerlo ?...
En primer lugar, es una idiotez meter todas las filas de una consulta en un array para saber la cantidad... Sería más conveniente autoincrementar una variable numérica... Pero no olvidemos que la mayorías de las extensiones de bases de datos en php tienen funciones para contar la cantidad de registros devueltos por una consulta...
Otra cosa que veo es que cierra el recurso al salir de la función.... Más sobrecarga en vano... Las variables globales para qué están? La función devuelve la cantidad de registros de una consulta... ¿porqué devolver el valor y ponerlo en una variable global al mismo tiempo?
En fin.... Esto es lo que se encuentra en un software de calidad.... Pero quién sabe lo que significa calidad?
ibito:
Respecto a tu pregunta de "alguien sabe que es la calidad?" te respondo que alguien muy famoso e inteligente dijo "Todo es relativo" :P
gnfrs:
jajajajaja
cierto
Admirable !
Altareum:
Respondiendo a tu otra pregunta.... Lo mejor (a mi parecer) es dejar que MySQL se encargue de esas cosas.
Y motivos hay de sobra, principalmente porque ese script lleva muchísimo tiempo más en procesarse que un simple COUNT() en la consulta. Te puedo asegurar que si trabajas con tablas grandes, te darás cuenta de la diferencia. Incluso usar la clásica función mysql_numrows() puede llegar a ser perjudicial, a tal punto de colgar el MySQL.
Saludos.
Altareum.
gnfrs:
Tené en cuenta los distintos tipos de motores....
MyISAM (por ejemplo) mantiene un registro con la cantidad de filas en la tabla, por lo tanto hacer un COUNT() de todos los registros de una tabla MyISAM es una cosa practicamente instantánea...
Ahora... con tablas transaccionales como INNODB la cosa es diferente, dado a que admite transacciones, debe contar los registros uno por uno, ya que al mismo tiempo que está haciendo esa consulta se pueden estar grabando o cancelando transacciones.... En este tipo de tablas es más lento.....
Pero de todas formas, es más rápido hacer con el motor de bases de datos que con el lenguaje interpretado (PHP) al conteo de registros.
saludos
Navegación
[#] Página Siguiente
Ir a la versión completa