Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Contar varios resultados en una sola consulta

Estas en el tema de Contar varios resultados en una sola consulta en el foro de Mysql en Foros del Web. Me gustaria poder contar varios resultados dependiendo del valor de algunos campos de una mista tabla en una sola consulta. Ahora mismo lo hago de ...
  #1 (permalink)  
Antiguo 21/02/2011, 15:36
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Contar varios resultados en una sola consulta

Me gustaria poder contar varios resultados dependiendo del valor de algunos campos de una mista tabla en una sola consulta. Ahora mismo lo hago de esta forma:

mysql_num_rows(mysql_query("select * from tabla_1 where estado = 'proceso' ");
mysql_num_rows(mysql_query("select * from tabla_1 where filtro = '2' ");
.........

Y así para cada resultado que quiero obtener, es decir que hago 4 o más consultas, querria saber como puedo hacerlas todas en una misma consulta.
Gracias por adelantado.
  #2 (permalink)  
Antiguo 21/02/2011, 15:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Contar varios resultados en una sola consulta

Podés usar UNION, ej:

Código SQL:
Ver original
  1. SELECT COUNT(*) AS cantproc FROM tabla_1 WHERE estado = 'proceso' UNION SELECT COUNT(*) AS cantfiltro FROM tabla_1 WHERE filtro = '2'

PD: sería sin usar mysql_num_rows...
  #3 (permalink)  
Antiguo 21/02/2011, 16:25
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Contar varios resultados en una sola consulta

Gracias Walter, podrias decirme como devuelve los resultados la sentencia que me has escrito? Como puedo usarlos?

Cita:
Iniciado por walterdevel Ver Mensaje
Podés usar UNION, ej:

Código SQL:
Ver original
  1. SELECT COUNT(*) AS cantproc FROM tabla_1 WHERE estado = 'proceso' UNION SELECT COUNT(*) AS cantfiltro FROM tabla_1 WHERE filtro = '2'

PD: sería sin usar mysql_num_rows...
  #4 (permalink)  
Antiguo 21/02/2011, 16:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Tema movido desde PHP a Mysql
  #5 (permalink)  
Antiguo 21/02/2011, 16:29
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 13 años, 4 meses
Puntos: 51
Respuesta: Contar varios resultados en una sola consulta

Por ejemplo:

Código PHP:
Ver original
  1. $result = mysql_query("SELECT count(*) AS cantproc FROM tabla_1 WHERE estado = 'proceso' UNION SELECT count(*) AS cantfiltro FROM tabla_1 WHERE filtro = '2'
  2. ");
  3.  
  4. $row = mysql_fetch_row($result);
  5.  
  6. $cantidad_por_proceso = $row[0];
  7. $cantidad_por_filtro = $row[1];
  #6 (permalink)  
Antiguo 21/02/2011, 17:11
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Contar varios resultados en una sola consulta

Muchas gracias por la ayuda Walter :). Gator disculpa el despiste por no haber metido el tema en el debido foro.
  #7 (permalink)  
Antiguo 22/02/2011, 09:22
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Contar varios resultados en una sola consulta

Probando veo que solo guarda el valor del primer select. Si hago un

print_r($row);

la matriz solo tiene un valor. Para obtener todos los valores hay que usar un bucle while.
  #8 (permalink)  
Antiguo 22/02/2011, 09:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar varios resultados en una sola consulta

Porque COUNT() es una función agrupada, y si no pones un criterio de agrupamiento, devolverá un sólo registro.
En tu caso debería devolver dos, uno por cada SELECT, pero como el UNION descarta las duplicaciones en los registros, si ambos SELECT devolviesen el mismo valor es probable que MySQL esté descartando uno de ellos.
Prueba así:
Código MySQL:
Ver original
  1. SELECT estado, COUNT(*) cantproc
  2. FROM tabla_1
  3. WHERE estado = 'proceso'
  4. SELECT filtro, COUNT(*) cantfiltro
  5. FROM tabla_1
  6. WHERE filtro = '2';

O bien:

Código MySQL:
Ver original
  1. SELECT COUNT(*) cantproc
  2. FROM tabla_1
  3. WHERE estado = 'proceso'
  4. SELECT COUNT(*) cantfiltro
  5. FROM tabla_1
  6. WHERE filtro = '2';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 22/02/2011, 10:02
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Contar varios resultados en una sola consulta

Gracias gnzsoloyo, lo pruebo y te digo algo. Saludos
  #10 (permalink)  
Antiguo 22/02/2011, 10:33
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Contar varios resultados en una sola consulta

No lo acabo de entender bien, con este codigo:

Código PHP:
$u_totales mysql_query("
    SELECT estado, COUNT(*) cantproc 
    FROM tabla_1 
    WHERE estado = 'proceso' 
    UNION 
    SELECT filtro, COUNT(*) cantfiltro 
    FROM tabla_1 
    WHERE filtro = '2';
"
);

$u_total mysql_fetch_row($u_totales); 
Al hacer un

Código PHP:
print_r($u_total); 
Me da como resultado:

Array ( [0] => proceso [1] => 6 )

Y si utilizo:

Código PHP:
$u_totales mysql_query("
    SELECT COUNT(*) cantproc 
    FROM tabla_1 
    WHERE estado = 'proceso' 
    UNION ALL
    SELECT COUNT(*) cantfiltro 
    FROM tabla_1 
    WHERE filtro = '2';
"
);

$u_total mysql_fetch_row($u_totales); 
Código PHP:
print_r($u_total); 
Me devuelve
Array ( [0] => 6 )

No se si me he explicado bien, pero lo que quiero, es que en este caso, me diera el número total de registros que contiene el valor "proceso" en el campo estado y el número total de registros que contienen el valor "2" en el campo filtro. No se si es que union no sirve para esta finalidad, pensaba que usando count(*) me mostraria los totales.
  #11 (permalink)  
Antiguo 22/02/2011, 11:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar varios resultados en una sola consulta

Los problemas de PHP los debes consultar en el foro de PHP. Acá el tema es la consulta de SQL, no la programación (cosas de las normas del foro).
Pero en lo esencial, para hacer las pruebas de las consultas debes olvidarte momentaneamente de lo que sea programación. Prueba las consultas directamente en el phpMyAdmin, de modo que puedas ver las tablas de resultado, para comprender bien qué es lo que te está devolviendo MySQL, porque la mezcla hace que no estemos entendiendo lo mismo.
El error base de tu consulta es que en realidad no es un UNION lo que debes hacer, sino un SELECT con uso de dos funciones: IF() y SUM(), que sería el modo más simple:
Código MySQL:
Ver original
  1. SELECT SUM(IF(estado = 'proceso', 1, 0)) cantproc, SUM(IF(filtro = '2', 1, 0))  cantfiltro
  2. FROM tabla_1
;
El UNION tiene sentido si lo que quieres es una tabla que encadene los resultados de dos tablas con la misma cantidad de campos y en el mismo orden. Es una forma simple de crear información listada originada por condiciones diferentes sobre la misma o diferentes tablas.
Pero en tu caso, estás tratando de contar elementos que están en la misma tabla, los cuales cumplen criterios completamente disímiles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 23/02/2011, 05:19
 
Fecha de Ingreso: mayo-2008
Ubicación: España
Mensajes: 130
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Contar varios resultados en una sola consulta

Gracias gnzsoloyo, ahora si obtengo los resultados que queria.
Ahora voy a probar añadir los resultados de otra tabla a la misma consulta a ver si lo consigo, que estoy algo verde con las consultas mysql, seguiré tu consejo de probar las consultas en el propio phpMyAdmin.

Saludos.

Etiquetas: contar, resultados
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 10:52.