PHP - ¿como cuento estos registros?

 
Vista:

¿como cuento estos registros?

Publicado por Ricardo Figueroa (16 intervenciones) el 01/07/2005 18:30:14
Holas a todos, pues el problema que tengo es con este codigo que utilizo para contar el total de registros:

$sql="SELECT campo1 FROM tabla1;
$resul=mysql_query($sql);
$numeroRegistros=mysql_num_rows($resul);

Solo funciona con pocos registros (0 - 50,000), pero con muchos registros falla, me da el siguiente error: (aproximadamente lee unos 6 millones de registros)

Fatal error: Maximum execution time of 30 seconds exceeded in drive:\...\la pagina.php on line 92

Existe alguna forma de ejecutar una consulta escalar????, no se utilizando la funcion "count( )" en el string del SQL, si saben como le agradeceria mucho su ayuda.

PD.
"Pidele a Dios una espalda mas fuerte, no una carga menos pesada"
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿como cuento estos registros?

Publicado por Mike79 (669 intervenciones) el 01/07/2005 18:38:43
Haber vamos por partes, la forma de contar registros con SQL Standard es:
"Select Count(campo) from tabla" y esto te regresa 1 solo renglon con un solo campo que contiene el total de registros.

Ahora bien, si quieres darle un nombre a ese registro podria ser
"Select Count(campo) Total from Tabla" y esto te regresa un campo llamado Total con este valor.

Segundo, el error de: "Fatal error: Maximum execution time of 30 seconds exceeded in drive:\...\la pagina.php on line 92 ", te lo esta marcando por que se esta excediendo el tiempo maximo permitido para ejecutar un php, que veo que en tu caso es de 30 segundos, este tiempo lo puedes ampliar en el php.ini

Tercero, ¿Quien te dijo que MySql en Windows es rapido?, pienso que es windows por que dices "drive:\". MySql en Windows es sumamente lento, no se compara con la velocidad en otros sistemas operativos, Consultas que en Windows te llevan 1 minuto, en otros sistemas operativos como Linux o BSD te llevan 25 segundos. Has la prueba y veras.

Cuarto y ultimo, ¿Quien te dijo que MySql es para trabajo pesado?, dices que tienes 6 millones de registros y supongo que este número seguira creciendo mucho más, MySql es muy rapido, para bases de datos pequeñas y medianas, y para querys sencillos, pero si quieres usar un gran volumen de registros o querys muy complejos que en MySQL tardan mucho, entonces cambiate de Gestor, PostgreSQL es una buena opción y tambien es software libre, aunque existen muchas más.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿como cuento estos registros?

Publicado por Ricardo Figueroa (16 intervenciones) el 01/07/2005 19:03:04
Oye mike, gracias, pero fijate la consulta como tu dice(Select Count(campo) from tabla) me devuelve:
Resource id #6
Cuando yo esperaria un numero (6,000,000)
si utilizo count() no me da el problema de los 30 segundos, pero no recibo un valor que pueda almacenar en una variable.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿como cuento estos registros?

Publicado por Mike79 (669 intervenciones) el 01/07/2005 20:14:23
Por que eso es el Id del recurso que esta devolviendo el php.
En si, tienes que pedirle que ahora te regrese los campos, la forma facil y bonita es:

$Campos = mysql_fetch_array($Resultado);

Donde $Resultado es el id del recurso que mencionas
y $Campos es un arreglo asociativo con toda la información de tu consulta.

Ejemplo completo:
$Sql = "Select count(MiCampo) Total from MiTabla":
$qResultado = mysql_query($Sql);
if ($qResultado && ($Campos = mysql_fetch_array($qResultado))) {
echo "Total de Registros: ".$Campos['Total'];
} else {
echo "Ocurrio un error al ejecutar el Query.";
}

Si lo quieres hacer mas simple y siempre confias que el resultado es correcto por que tu nunca tienes ningun error y tu servidor siempre hace todo bien, la forma rapida y resumida seria:

$Renglon = mysql_fetch_row(mysql_query("Select count(MiCampo) from MiTabla"));
echo "Total de Registros: ".$Renglon[0];

No te recomiendo esto ultimo ya que siempre es bueno checar por errores.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿como cuento estos registros?

Publicado por Ricardo Figueroa (16 intervenciones) el 01/07/2005 22:51:16
Pues oye Mike me funciono de maravillas, Te agradezco mucho la ayuda y tus tips, dejame decirte que MySQL me funciona de maravillas con muchos datos, bueno yo solo la he probado como con 18 millones y le hace frente muy bien.

Con respecto al windows, que te puedo decir...La emprea le tiene miedo a Linux, pero poco poco voy rompiendo ese paradigma.

Sigue adelante ayudando a la gente.

PD. oye a veces eres un poco sarcastico con tu posts, je, je, je....
creo que te comprendo muy bien porque a veces yo soy igual, solo te dejo un dicho muy sabio:

" LOS HUMILDES SON LOS MAS LETALES "
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿como cuento estos registros?

Publicado por Mike79 (669 intervenciones) el 01/07/2005 23:33:33
¿Un poco zarkastico?, mentiras, debe ser tu imaginación.
Si, si lo soy, me gusta el zarkasmo, y lo hago adrede, por que muchas personas no saben preguntar. Entre más mal hecha este la pregunta, más sera mi grado de zarkasmo.

Que bueno que te funciono. Y te repito que MySql no es para cosas grandes. Pero si MySql no es para cosas grandes. Windows mucho menos.

Yo que tú, con 18 millones de registros meteria postgreSQL en Linux pero de volada.

Si te funciona bien hasta ahorita, de seguro es por que no has empezado a utilizar SQL's complejos, cuando tengas que por ejemplo, hacer una mafudada es cuando MySQL se va a sentar y te va a dejar hasta 5 minutos tirado.

Cuando hagas un select más o menos como este me platicas que tal te jala el MySQL en tus 18 millones en Windows, en windows es muy lento:

"Select a.IdPersona, a.Login, b.Nombre, b.Sexo, c.Salario from Users as a, Datos as b, Nomina as c where a.IdPersona=b.IdPersona and c.IdPersona=b.IdPersona and b.Sexo="F" and c.Salario > 500 and c.Salario < 2000 Order by b.Nombre DESC Limit 0,50"

Este es un ejemplo imaginario, hay consultas más complejas aún, por ejemplo los sql anidados, pero MySql de plano no los soporta.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar