Foros del Web » Programando para Internet » PHP »

se puede poner mas de 1 count en una consulta?

Estas en el tema de se puede poner mas de 1 count en una consulta? en el foro de PHP en Foros del Web. Mi servidor de db es MYSQL El SQL lo tengo que poner en una sola consulta con el fin de ordenar los resultados por cantidad ...
  #1 (permalink)  
Antiguo 07/12/2003, 16:46
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 14 años, 11 meses
Puntos: 1
Pregunta se puede poner mas de 1 count en una consulta?

Mi servidor de db es MYSQL

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

Las tablas estan relacionadas por el id de la tabla prueba_1:

Tengo las siguientes tablas:

prueba_1
--------
| id | columna |
1 texto
2 texto


prueba_2
--------
| id | id_prueba_1 | columna |
1 1 texto
2 1 texto
3 1 texto
4 1 texto
5 2 texto


prueba_3
--------
| id | id_prueba_1 | columna |
1 1 texto


prueba_4
--------
| id | id_prueba_1 | columna |
1 1 texto
2 1 texto
3 2 texto
4 2 texto
5 2 texto

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.

Se entiende lo que quiero hacer?

Gracias de antemano

Última edición por Ramos Mejia; 09/12/2003 a las 13:14
  #2 (permalink)  
Antiguo 07/12/2003, 20:37
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 14 años, 11 meses
Puntos: 1
nadie tiene una idea?
  #3 (permalink)  
Antiguo 07/12/2003, 22:19
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
No entiendo lo que quieres hacer...

Explicalo un poco mas
__________________
Manoloweb
  #4 (permalink)  
Antiguo 07/12/2003, 22:37
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
La verdad yo tampoco entiendo qué quieres hacer.
Escribe por ejemplo además de las tablas, el resultado que quieres obtener... a ver si así se entiende mejor.

Saluods
  #5 (permalink)  
Antiguo 08/12/2003, 00:25
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 14 años, 11 meses
Puntos: 1
A ver si me explico mejor quiero tomar los registros de la tabla prueba_1 y contar los registros de otras tablas (prueba_2, prueba_3, prueba_4) que tengan en comun el id de la tabla prueba_1 que en las otras tablas se referencia con la columna id_prueba_1 (todo en una sola consulta)

Por ejemplo:

$sql_1 = mysql_query("
select
id,
columna
from
prueba_1
");

while($array = mysql_fetch_array($sql_1)){ //genero el array y dentro del bucle individualmente haria estas 3 consultas para obtener el numero de registros

$sql_2 = mysql_query("
select
count(*) as numero_2
from
prueba_2
where
id_prueba = '$array[id]'
");

// me daria 4

$sql_3 = mysql_query("
select
count(*) as numero_3
from
prueba_3
where
id_prueba = '$array[id]'
");

// me daria 1

$sql_4 = mysql_query("
select
count(*) as numero_4
from
prueba_4
where
id_prueba = '$array[id]'
");

// me daria 2

}

Lo que quiero es hacer la consulta toda junta osea fusionarla para poder ordenar los resultados por la cantidad de registros que me da numero_2, numero_3 o numero_4:

Intente algo haci pero no va

$sql = mysql_query("
select
prueba_1.id as id,
prueba_1.columna as columna,
count(prueba_2.id) as numero_2,
count(prueba_3.id) as numero_3,
count(prueba_4.id) as numero_4,
from
prueba_1
left join
prueba_2
on
prueba_1.id = prueba_2.id_prueba_1
left join
prueba_3
on
prueba_1.id = prueba_3.id_prueba_1
left join
prueba_4
on
prueba_1.id = prueba_4.id_prueba_1
group by
id
order by
numero_2
");

Haber si me ayudan que mi cabeza esta sacando humo
  #6 (permalink)  
Antiguo 08/12/2003, 12:44
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 14 años, 11 meses
Puntos: 1
parece que nadie sabe?

me tendre que resignar
  #7 (permalink)  
Antiguo 08/12/2003, 19:54
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Para que haga todo lo que quieras en una línea no se me ocurre aún... pero si utilizas GROP BY te podrás ahorra un montón de código:

SELECT id_prueba_1, COUNT(*) FROM `prueba_2` GROUP BY id_prueba_1

SELECT id_prueba_1, COUNT(*) FROM `prueba_3` GROUP BY id_prueba_1

SELECT id_prueba_1, COUNT(*) FROM `prueba_4` GROUP BY id_prueba_1

Todo esto sin hacer el primer while

Saludos
  #8 (permalink)  
Antiguo 08/12/2003, 22:00
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
O sea que todo el código que pusiste antes.. se puede hacer así:
Código PHP:
for($i=2;$i<=4;$i++){
   
$sql="SELECT id_prueba_1, COUNT(*) FROM prueba_".$i." GROUP BY id_prueba_1";
   
$result=mysql_query($sql);

En cada pasada tendrás disponible una tabla con la siguiente estructura:

tabla_2
id_prueba_1---COUNT
1 --- 5
2 --- 3

O sea te da el resultado de cuántas veces se repite cada id_prueba_1 en la tabla.

Espero que se haya entendido:

Saludos
  #9 (permalink)  
Antiguo 09/12/2003, 06:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ramos Mejia .. ¿y te resultó con lo que expuso jpinedo? .. Yo creo que por ahí va la cosa ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 09/12/2003, 12:31
 
Fecha de Ingreso: enero-2003
Mensajes: 122
Antigüedad: 14 años, 11 meses
Puntos: 1
La solucion de jpinedo no me sirve porque estoy en lo mismo osea no puedo ordenar los registros de la tabla prueba_1 por la cantidad de registros que hay en prueba_2 o prueba_3 o prueba_4


ejemplo 1:

order by numero_2

resultado:

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

id [ 1 ] columna [ texto ] //tomado de la tabla prueba_1

registros de la tabla prueba_2 [ 4 ] registros de la tabla prueba_3 [ 1 ] registros de la tabla prueba_4 [ 2 ]

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

id [ 2 ] columna [ texto ] //tomado de la tabla prueba_1

registros de la tabla prueba_2 [ 1 ] registros de la tabla prueba_3 [ 0 ] registros de la tabla prueba_4 [ 3 ]

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


ejemplo 2:

order by numero_4

resultado:

id [ 2 ] columna [ texto ] //tomado de la tabla prueba_1

registros de la tabla prueba_2 [ 1 ] registros de la tabla prueba_3 [ 0 ] registros de la tabla prueba_4 [ 3 ]

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

id [ 1 ] columna [ texto ] //tomado de la tabla prueba_1

registros de la tabla prueba_2 [ 4 ] registros de la tabla prueba_3 [ 1 ] registros de la tabla prueba_4 [ 2 ]

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

Última edición por Ramos Mejia; 09/12/2003 a las 13:15
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:24.