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

multiple count en un query?...Se puede o no...???

Estas en el tema de multiple count en un query?...Se puede o no...??? en el foro de Bases de Datos General en Foros del Web. Mi servidor de db es MYSQL 4.0.16 El SQL lo tengo que poner en una sola consulta con el fin de ordenar los resultados por ...
  #1 (permalink)  
Antiguo 17/12/2003, 23:05
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 1
Pregunta multiple count en un query?...Se puede o no...???

Mi servidor de db es MYSQL 4.0.16

El SQL lo tengo que poner en una sola consulta con el fin de ordenar los resultados por
cantidad de registros de tabla_2 o tabla_3.

Las tablas estan relacionadas por el id de la tabla_1:

Tengo las siguientes tablas (ejemplo):

tabla_1
--------
| id | texto |
1 casa
2 hola


tabla_2
--------
| id | id_tabla_1 |
1 1
2 1
3 2
4 1
5 2


tabla_3
--------
| id | id_tabla_1 |
1 2


He leido el manual de MYSQL pero no encuntro la solucion o bien no entendi como hacerlo, ya
que no encontre ejemplos o referencias con respecto a el problema que tengo.

He intentado algo como esto pero no anda como corresponde:

Código PHP:
mysql_query("    
    select
        tabla_1.id as id,
        tabla_1.texto as texto,
        count(tabla_2.id) as registros_t2,
        count(tabla_3.id) as registros_t3
    from
        tabla_1
    left join
        tabla_2
    on
        tabla_1.id = tabla_2.id_tabla_1
    left join
        tabla_3
    on
        tabla_1.id = tabla_3.id_tabla_1
    group by
        tabla_1.id
    order by
        tabla_1.id
"
); 
ejemplo 1:

order by
registros_t2


resultado:

--------------------------------------------

id (1) texto (hola) registros_t2 (3) registros_t3 (0)
id (2) texto (casa) registros_t2 (2) registros_t3 (1)

--------------------------------------------

ejemplo 2:

order by
registros_t3


resultado:

--------------------------------------------

id (2) texto (casa) registros_t2 (2) registros_t3 (1)
id (1) texto (hola) registros_t2 (3) registros_t3 (0)

--------------------------------------------

Gracias por su ayuda..!!
  #2 (permalink)  
Antiguo 18/12/2003, 23:34
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 21 años, 3 meses
Puntos: 1
Nadie me puede ayudar. Alguna idea??
  #3 (permalink)  
Antiguo 19/12/2003, 08:13
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Prueba con:

select
tabla_1.id as id,
tabla_1.texto as texto,
count(DISTINCT tabla_2.id) as registros_t2,
count(DISTINCT tabla_3.id) as registros_t3
from
tabla_1
left join
tabla_2
on
tabla_1.id = tabla_2.id_tabla_1
left join
tabla_3
on
tabla_1.id = tabla_3.id_tabla_1
group by
tabla_1.id
order by
tabla_1.id

Creo que verias por que fallabas si intentas ver el resultado de la consulta en la que intentabas realizar el join:

select
tabla_1.id as id,
tabla_1.texto as texto,
tabla_2.id,
tabla_3.id
from
tabla_1
left join
tabla_2
on
tabla_1.id = tabla_2.id_tabla_1
left join
tabla_3
on
tabla_1.id = tabla_3.id_tabla_1
group by
tabla_1.id
order by
tabla_1.id

Visualiza el resultado de esta consulta (en el mismo phpMyAdmin). Veras que se repiten los id de tabla3. Eso es porque estas combinando el resultado de esta consulta:

select
tabla_1.id as id,
tabla_1.texto as texto,
tabla_2.id
from
tabla_1
left join
tabla_2
on
tabla_1.id = tabla_2.id_tabla_1
group by
tabla_1.id
order by
tabla_1.id

con tabla3.

Con count(DISTINCT) (http://www.mysql.com/doc/en/GROUP-BY-Functions.html) lo que hace es contar el numero de valores no repetidos (y distintos de NULL) de la columna.

Saludos.

PD: No se si esta sintaxis es especifica de alguna version de MySQL. Pruebala y nos cuentas.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 16:21.