PHP - Consultas dobles

   
Vista:

Consultas dobles

Publicado por ArielSka (7 intervenciones) el 04/09/2007 00:26:06
hola
tengo una consulta de este tipo :

"SELECT Categoria, COUNT(*) AS subtotal FROM Catalogo GROUP BY Categoria";

la que me devuelve 4 filas (osea que hay 4 categorias usadas en el catalogo);

ahora, tengo un listado de por ejemplo 10 categorias y queria poner a su lado el número de itemes que tiene dentro, y si es 0 también:

categoria1 (0)
categoria2 (0)
categoria3 (12)
categoria4 (0)
categoria5 (31)
categoria6 (4)
categoria7 (3)
categoria8 (0)
.
.
.
.
etc....

¿como puedo hacer esta union de 2 consultas a base de datos?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consultas dobles

Publicado por Soraya (41 intervenciones) el 04/09/2007 03:04:38
Hola Ariel, quizas sería de utilidad si podés explicarnos un poquito la estructura de la tabla o tablas que habria que usar en la consulta porque no entiendo por ejemplo si los items de cada categoría están en otra tabla.
Si me explicas un poquito esta estructura quizas te pueda ayudar.

Saludos
Soraya
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consultas dobles

Publicado por Diego Romero (1450 intervenciones) el 04/09/2007 08:46:09
Esta pregunta no tiene nada que ver con PHP, ve al foro de SQL.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consultas dobles

Publicado por ArielSka (7 intervenciones) el 04/09/2007 12:37:55
Pues si tiene que ver con php, ya que se trata de anidar dos bucles o usar una función para que tenga resultado al mostrarse.

tabla1 =
"SELECT Categoria, COUNT(*) AS subtotal FROM Catalogo GROUP BY Categoria";

la consulta devuelve una tabla de este tipo

Categoria - Subtotal
25 - 5
12 - 4
13 -8
16 -6

(Significa por ejemplo que la categoría 25 aparece 5 veces en el catalogo, y la 12, 4 veces)

ahora hago una consulta a otra tabla que contiene los mismos números de categorias, más categorías que no están en el catalogo:

"SELECT id_categoria, nombre_categoria FROM TablaCategorias"

lo que muestra
id_categoria - nombre_categoria
12 - zapatos
13 - chanclas
14 - sombreros
20 - Calcetines
25 - etc...
16 - etc....

ahora quiero recorrer esta última tabla, y comparar si coinciden id_categoria y Categoría, si es así añadir el Subtotal en la salida, es decir así:

12 - zapatos (4)
13 - chanclas (8)
14 - sombreros (0)
20 - Calcetines (0)
25 - etc... (5)
16 - etc.... (6)

Véase que se muestra un (0) cuando no existe coincidencia.

Yo sé hacerlo de forma que solo se muestren las categorías con elementos en el catalogo, pero este otro método permite ver al usuario que categorías existen pero no tienen valores en el catalogo

intente un método de anidar dos bucles, pero me salían los resultados repetidos y muchas más veces, imaginaros que son dos arrays y que los quiero comparar, la idea es esa, adiós al SQL.... la consulta ya fue realizada y estos son sus valores.

Es muy fácil explicarlo, pero no me doy cuenta como se hace... quizá alguien ya tiene experiencia con este tipo de cosas, gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consultas dobles

Publicado por Nicolás (154 intervenciones) el 04/09/2007 13:57:02
Deberías hacer un bucle para la consulta

"SELECT id_categoria, nombre_categoria FROM TablaCategorias"

y a cada vuelta del bucle hacer

"SELECT COUNT(*) AS subtotal FROM Catalogo WHERE Categoria = ".$id_categoria;

Algo mas o menos asi...

$categorias = mysql_query("SELECT id_categoria, nombre_categoria FROM TablaCategorias");
while ($categoria = mysql_fetch_array($categorias)) {
    $id_categoria = $categoria['id_categoria'];
    $categoria = $categoria['nombre_categoria'];
    echo $id_categoria . " " . $categoria;
    $cantidad = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS subtotal FROM Catalogo WHERE Categoria = ".$id_categoria));
    echo " (" . $cantidad['subtotal'] . ")<br>";
}

No lo he probado asi que seguramente tiene errores. Revisalo y nos avisas si te sirvió o no.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consultas dobles

Publicado por ArielSka (7 intervenciones) el 04/09/2007 20:26:39
perfecto!, estuve probando lo que me pones ahí nicolás, y es exactamente ese el resultado que yo esperaba !

27 sombrillas (3)
26 sombreros y pamelas (9)
25 abanicos (4)
28 toallas (5)
41 neveras (0)
30 bandanas (6)
31 chanclas (3)
32 gorras (17)
33 ocio (0)

tengo que arreglar para que no aparezca el id_categoria delante, pero bueno, la idea básica era esa, al final resultados como ocio y neveras aparece el (0) dentro que es lo que me importaba :)

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consultas dobles

Publicado por Diego Romero (1450 intervenciones) el 04/09/2007 17:34:27
Pues sigo sin ver qué tiene que ver PHP en esta pregunta. Lo que quieres hacer yo lo haría con INNER JOIN en SQL o un SELECT de un SELECT pero eso sigue siendo SQL y no PHP. Y lo puedes hacer en cualquier lenguaje que soporte intefaz SQL, sea PHP, ASP, Delphi, VB o BCB...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar