Foros del Web » Programando para Internet » PHP »

Ayuda con SELECT COUNT (*)

Estas en el tema de Ayuda con SELECT COUNT (*) en el foro de PHP en Foros del Web. Buenos dias a todos desde Barcelona. tengo una duda sobre el select count. a ver si consigo entenderme. yo utilizo el select count para obtener ...
  #1 (permalink)  
Antiguo 22/02/2006, 06:07
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Ayuda con SELECT COUNT (*)

Buenos dias a todos desde Barcelona.

tengo una duda sobre el select count. a ver si consigo entenderme. yo utilizo el select count para obtener la cantidad de registros insertados por un determinado cliente. hasta aqui perfecto:

$Otros = mysql_query("SELECT COUNT(*) as totalOtros FROM clientes where cliente= $idCliente") or die(mysql_error());
$totalOtros = mysql_fetch_array($Otros);

cargo el id, y segun el id me devuelve el total. esto perfecto. asi acceden a un panel de control mediante el id,y se muestra el total de registros.

ahora lo que tengo es un tabla, en la cual muestro todos los asociados, con un while:

res = mysql_query("SELECT clientes.id,nombre,usuario...

y luego antes de la tabla:

if (mysql_num_rows($res) > 0) {
while(list($id,$nombre,$usuario,$password,$poblaci on...) = mysql_fetch_array($res)){

luego la tabla, y me carga en cada linea, los datos del cliente. comp puedo hacer, para incluir un count para cada cliente, que me de el numero de registros de cada uno de ellos??

salu2
  #2 (permalink)  
Antiguo 22/02/2006, 06:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Deberías mostrar la consulta SQL completa que haces .. pero en principio se trataría de Agrupar esos registros (GROUP BY cliente.id) para así aplicar el COUNT() ... con eso tendrías "cliente -> subtotal" ..

Concreta el uso de "COUNT()" con "GROUP BY" (u otras técnicas similares) en el foro de "Base de datos".

Un saludo,
  #3 (permalink)  
Antiguo 22/02/2006, 06:18
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
gracias Cluster,pero no acabo de entender exactamente lo que me dices. lo que debo preguntar exactamente.

pensaba que dentro del while bastaba con hacer una consulta.

salu2
  #4 (permalink)  
Antiguo 22/02/2006, 06:49
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
No es necesario volver a preguntar dentro del while nuevamente, pues group by puede hacer el trabajo, ejemplo:

Tabla compras
--------------
id_cliente
id_producto
monto

Tabla clientes
-------------
id_cliente
nombre
direccion

Código PHP:
   //se cuentan los id de clientes que tengan compras y que tengas datos 
   //asociados en la tabla clientes, mostrando la cantidad de compras que 
   //han hecho y su nombre
   
$sql="select count(compras.id_cliente) as ncompras, nombre from compras";
   
$sql.=" inner join clientes on compras.id_cliente=clientes.id_cliente";
   
$sql.=" group by compras.id_cliente";
   
$result=mysql_query($sql,$link);
   while (
$fila=mysql_fetch_assoc($result))
   {
       echo 
"Cliente: ".$fila['nombre']." -> N Compras: ".$fila['ncompras']."<br>";
   } 
  #5 (permalink)  
Antiguo 22/02/2006, 07:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Gracias claudiovega por "ilustrar" mi teoría xD.

Un saludo,
  #6 (permalink)  
Antiguo 22/02/2006, 09:30
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
gracias a los 2, a ver si lo entiendo. os pongo la consulta entera tal y como la tengo:

$res = mysql_query("SELECT Clientes.id,nombre,usuario,password,poblacion,emai l_inmo,LOGO FROM Clientes inner join poblaciones on (ID_POBLACION = poblaciones.ID) ORDER BY id") or die (mysql_error());

de esta consulta, algo el while,y muestro los campos nombre, usuario, password, etc...

de la forma que me comentais, podria tener una misma única consulta que englobase las dos? o tengo que hacer una para obtener los resultados y la otra para obtener la cantidad de registros? lo digo porque si hago el
SELECT COUNT as total por ejemplo, no obtendre los campos nombre, email,etc... no?

salu2
  #7 (permalink)  
Antiguo 22/02/2006, 09:32
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Muestra tu estructura de tablas para indicarte mejor que hacer.
  #8 (permalink)  
Antiguo 22/02/2006, 09:36
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
lo he conseguid chicos, muchisimas gracias!!!

al final he metido la consulta dentro del while, de la siguiente manera:

if (mysql_num_rows($res) > 0) {
//si hay resultados.
while(list($id,$nombre,$usuario,$password,$poblaci on,$email_inmo,$LOGO) = mysql_fetch_array($res)){
$Otros = mysql_query("SELECT COUNT(*) as totalOtros FROM clientes where idcliente= $id") or die(mysql_error());
$totalOtros = mysql_fetch_array($Otros);

y me da el resultado de cada uno de los clientes.

muchisimas gracias!
  #9 (permalink)  
Antiguo 22/02/2006, 09:46
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Por supuesto que se puede, pero es más lento.
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 13:26.