Comunidad de diseño web y desarrollo en internet online

Problema con Count(*) de mysql

Citar            
MensajeEscrito el 03 May 2006 10:41 pm
tengo una pregunta
$numero = mysql_query("SELECT COUNT( * ) FROM `tbl_agenda`");
la siguiente linea devuelve (la variable $numero) algo asi como Resource id #4 cuando deberia devolver 1, que es el numero de filas que hay en esa tabla.

Es la version del mysql????

Busque en google , pero no hay nada al respecto acerca de ese problema en particula!!!, de hecho si hay una pregunta parecida, pero tampoco hay respuesta!!!

hay alguna otra forma de saber el numero de filas de una tabla es especifico, sin realizar la consulta tipo
$ cc = mysql_query("SELECT * FROM `tbl_agenda`");
mysql_num_rows($cc)

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 03 May 2006 11:30 pm
Me lleva la tiznada!!!
Estaba haciendo un incorrecto uso de sintaxis!!
Puse el post pues ya habia buscado en el foro, y no habia encontrado nada, pero lo que no se me ocurrio (Sigh, el cansancio mental no me permitio pensar con claridad) y de repente resolicite mi contraseña de los foros del web (Tenia mucho sin entrar) debido a que solo autenticado se permite el uso del buscador y ya di con la respuesta.
La dejo por si a alguien le ocurre lo mismo
$query = "SELECT COUNT(*) as cant FROM `tbl_agenda`";
$reg = mysql_query($query);
$cant = mysql_result($reg, 0, "cant");
echo $cant;

Este metodo es mejor pues se consumen menos recursos al hacer el query!!!

Ahora, tengo una nueva pregunta!!!
este metodo que tan eficiente es con respecto a SQL_CALC_FOUND_ROWS +
SELECT FOUND_ROWS()
Son de uso diferente (o sea devuelven resultados diferentes)??
cual es mas eficiente???
cuales son las ventajas y desventajas de uno y otro??
Gracias foro!!! ;)

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 04 May 2006 01:49 pm
A ver no es cual es mejor que la otra, se usan para dos cosas distintas... si solo quieres contar los registro que te retorna una consulta usa COUNT *, el uso de SQL_CALC_FOUND_ROWS * y SELECT FOUND_ROWS(), es para consultas que usen el LIMIT y lo que hace SQL_CALC_FOUND_ROWS es contar los registros de la consulta sino se hubiera usado el LIMIT, supongamos que tienes una tabla con 100 registros

Código :

SELECT COUNT(*) AS total FROM table  LIMIT 0, 10// esto retorna 10 

--- uso de SQL_CALC_FOUND_ROWS y FOUND_ROWS();

SELECT SQL_CALC_FOUND_ROWS * FROMT table LIMIT 0,10
SELECT FOUND_ROWS(); // esto retorna 100


Ahora SQL_CALC_FOUND_ROWS se usan para casos como la paginación, que necesitas filtrar la información que le das al cliente, porque necesitas mandarle solo una porcion del total de registros, pero para poder hacer la paginación necesitas saber el total, la opcion mode usuario es hacer 2 consultas, una con LIMIT y otra sin el LIMIT, mandar la respuesta al usuario con la consulta que usa el LIMIT y hacer la paginación con la segunda consulta sin el LIMIT, pero esto tardaría mucho más que usando SQL_CALC_FOUND_ROWS * y SELECT FOUND_ROWS()

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2006 02:14 pm
No hubiera sido más fácil hacer un mysql_num_rows para saber cuantas filas tienes????

Por Aoyama

BOFH

6224 de clabLevel

6 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Bastard Operators From Hell

Webdesigner & Developer, en mis ratos libres bebo café por litros.

firefox
Citar            
MensajeEscrito el 04 May 2006 02:18 pm
no Aoyama, es mas facil que mysql cuente cuantos registros hay en una consulta, a que extraiga los registros de la consulta y luego los cuente.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2006 02:27 pm

Aoyama escribió:

No hubiera sido más fácil hacer un mysql_num_rows para saber cuantas filas tienes????

Segun eso no :S por aquello que se consumen muchos mas recursos hacerlo de esa manera. (en ambos casos $cant representa el ansiado numero de filas totales en una tabla.)
Se puede hacer de la siguiente forma para saber el numero total de filas :

Código :

$ cc = mysql_query("SELECT * FROM `tbl_agenda`");
$cant = mysql_num_rows($cc)

Pero segun encontre en varias fuentes, lease la web del programador y los foros del web, la manera correcta es esta:

Código :

$query = "SELECT COUNT(*) as cant FROM `tbl_agenda`";
$reg = mysql_query($query);
$cant = mysql_result($reg, 0, "cant");


Regresando a la inquietud inicial:
Precisamente necesitaba saber el numero de total de filas de la tabla para hacer una paginacion.
ese numero lo puedo obtener con count, con el ejmeplo de arriba y tambien con la siguiente funcion.
Ahora nuevamente la misma pregunta sr. Maikel, segun entiendo si hago la consulta con count(), puedo saber el numeo total de filas de la tabla y luego hacer la paginacion

Pero tambien puedo conocer ese total de filas con la sig funcion

Código :

function get_rows ($table) {
   $temp = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM $table LIMIT 1");
   $result = mysql_query("SELECT FOUND_ROWS()");
   $total = mysql_fetch_row($result);
   return $total[0];
}


Mas no se si sea correcta. :S , respecto a la eficiencia del algoritmo.
La Pregunta es : pa ra paginar unas consultas, como obtengo el numero total de filas de una tabla, de una manera eficiente???
Con count(*) devolviendo el numero total de filas de la tabla o con SQL_CALC_FOUND_ROWS + SELECT FOUND_ROWS()

Gracias por responder!!! ;)

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 04 May 2006 02:33 pm
Ahora SQL_CALC_FOUND_ROWS se usan para casos como la paginación, que necesitas filtrar la información que le das al cliente, porque necesitas mandarle solo una porcion del total de registros, pero para poder hacer la paginación necesitas saber el total, la opcion mode usuario es hacer 2 consultas, una con LIMIT y otra sin el LIMIT, mandar la respuesta al usuario con la consulta que usa el LIMIT y hacer la paginación con la segunda consulta sin el LIMIT, pero esto tardaría mucho más que usando SQL_CALC_FOUND_ROWS * y SELECT FOUND_ROWS()




Código :

$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM table  LIMIT 0,10"
$result = mysql_query($sql);
$sql = "SELECT FOUND_ROWS();"
$resultTotal = mysql_query($sql);
$total = mysql_result($resultTotal,0);

while ($row = mysql_fetch_array($result)){
    echo $row['campo1'];
    echo $row['campo2'];
    echo $row['campoN'];       
}


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2006 02:39 pm
Aja!!!! ahora si me ha quedado claro , muchisismas gracias Maikel...
de ahora en adelante la implementacion sera de la manera correcta
Gracias de nuevo ^^ ^^ ^^ ^^ ^^ ^^

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.