Foros del Web » Programando para Internet » PHP »

Problema con COUNT

Estas en el tema de Problema con COUNT en el foro de PHP en Foros del Web. Hola El problema: la consulta funciona de coña pero al hacer el count pero aunque no de ningún resultado después de hacerla siempre me da ...
  #1 (permalink)  
Antiguo 30/11/2003, 12:35
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 14 años, 1 mes
Puntos: 0
Problema con COUNT

Hola
El problema: la consulta funciona de coña pero al hacer el count pero aunque no de ningún resultado después de hacerla siempre me da "1" (y nunca "0") a ver si alguien sabe como solucionarlo. Gracias (que conste que soy novato) lo digo por si está muy liado el código:

Código PHP:
open();
$query "SELECT COUNT(reserva.fecha) 
FROM aparcamiento INNER JOIN coches ON aparcamiento.numero=coches.aparcamiento
 INNER JOIN reserva ON (coches.matricula=reserva.matricula)
 INNER JOIN usuarios ON (reserva.nif=usuarios.nif)
 WHERE aparcamiento='3' AND fecha='$_POST[fecha]'"
;
$result mysql_query($query) or die(mysql_error());
while(
$reserva mysql_fetch_array($result))
$reservas[]=$reserva
Luego para mostrar el resultado hago un:
Código PHP:
<?=count($reservas); ?>
Para ver el valor de $reservas y siempre me da un valor igual o mayor a 1 pero nunca cero.
  #2 (permalink)  
Antiguo 30/11/2003, 13:48
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
yo uso una classe ...

Código PHP:
/********************************************************************************/
/*           FUNCION PARA CONTAR EL NUMERO DE REGISTROS DE UNA TABLA            */
/********************************************************************************/
class FUNC_mysqlCountFilas {

var 
$sql_host;
var 
$sql_usuario;
var 
$sql_pass;
var 
$sql_db;

var 
$rstemp;

    function 
FUNC_mysqlCountFilas ($sql_host,$sql_usuario,$sql_pass,$sql_db) {

        
$this->host $sql_host;
        
$this->user $sql_usuario;
        
$this->password $sql_pass;
        
$this->database $sql_db;

        
$this->connect();
    }

    function 
connect () {

        
$this->conn = @mysql_pconnect($this->host,$this->user,$this->password)
            or die(
"La conexion $server ha fayado <br>\n");

        @
mysql_select_db($this->database,$this->conn)
            or die(
"Error:" mysql_errno() . " : " mysql_error() . "<br>\n");

        return 
$this->conn;
    }

    function 
query($sql) {

        
$this->rstemp = @mysql_query($sql,$this->conn)
            or die(
"Error:" mysql_errno() . " : " mysql_error() . "<br>\n");

        return 
$this->rstemp;
    }

    function 
num_rows() {

        
$numeroFilas = @mysql_num_rows($this->rstemp);

        return 
$numeroFilas;
    }

}
////////////////////////////////////////////////////////////////////////////////// 
y asi la uso

Código PHP:
$mysql = New FUNC_mysqlCountFilas($sql_host,$sql_usuario,$sql_pass,$sql_db);//inicio classe para saber el numero de registros de las tablas
$mysql->query("SELECT id FROM $sql_tabla_count_pulsa WHERE navegador_extra='MSIE'") or die("MySQL dice: ".mysql_error());
$numero $mysql->num_rows();
echo 
$numero

saludois
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 30/11/2003 a las 13:50
  #3 (permalink)  
Antiguo 01/12/2003, 05:20
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 14 años, 1 mes
Puntos: 0
Gracias nuevo por la sugerencia pero es un ejercicio y no me dejan usar clases aunque a nivel práctico te aseguro que lo usaré . Agradecería que alguien me explicara que estaba haciendo mal en el código que he pegado y porque siempre me da 1 el dichoso count en lugar de 0 como debería de ser, no se si es que lo he planteado mal o si es sólo por una chorrada por lo que no funciona.
Gracias
  #4 (permalink)  
Antiguo 01/12/2003, 05:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Siempre te devuelve que esa consulta ha devuelto un registro. Porque la consulta que has puesto siempre devuelve un registro con un campo, cuyo valor es valor del COUNT().

Si lo que quieres es mostrar el valor de COUNT(), seria algo asi:
Código PHP:
open();
$query "SELECT COUNT(reserva.fecha) 
FROM aparcamiento INNER JOIN coches ON aparcamiento.numero=coches.aparcamiento
 INNER JOIN reserva ON (coches.matricula=reserva.matricula)
 INNER JOIN usuarios ON (reserva.nif=usuarios.nif)
 WHERE aparcamiento='3' AND fecha='$_POST[fecha]'"
;
$result mysql_query($query) or die(mysql_error());
$cuenta mysql_result($result,0,0);
echo 
$cuenta
En cuenta tienes el valor de COUNT(), que es el numero de registros que devolveria la consulta:

$query = "SELECT *
FROM aparcamiento INNER JOIN coches ON aparcamiento.numero=coches.aparcamiento
INNER JOIN reserva ON (coches.matricula=reserva.matricula)
INNER JOIN usuarios ON (reserva.nif=usuarios.nif)
WHERE aparcamiento='3' AND fecha='$_POST[fecha]'";

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 01/12/2003, 12:23
Avatar de neofito  
Fecha de Ingreso: noviembre-2003
Mensajes: 138
Antigüedad: 14 años, 1 mes
Puntos: 0
Gracias a los dos Josemi y Nuevo.

Por cierto, ya que estoy aprendiendo PHP ¿qué me recomendáis usar cuando tenga que hacer un count para un entorno de producción utilizar el código que he desarrollado o utilizar clases como la que me ha enseñado Nuevo?
  #6 (permalink)  
Antiguo 01/12/2003, 13:40
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
como prefieras, aunq tu mismo te daras cuenta de lo que mas te interesa, y lo que mejor comportamiento dinamico lleva.... a mi gusto... ahora siempre intento usar funciones y classes para no repetir code... pero como ya digo... creo que es algo que se aprende con el tiempo, amedida que vas aprendiendo.

un saludo. ;)
__________________
3w.valenciadjs.com
3w.laislatv.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:03.