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

Ayuda con una consulta a dos tablas

Estas en el tema de Ayuda con una consulta a dos tablas en el foro de Bases de Datos General en Foros del Web. Hola amigos, estoy atorado con una consulta SQL y francamente ya no doy con la forma de ejecutarla, doy vueltas y vueltas a lo mismo. ...
  #1 (permalink)  
Antiguo 08/04/2008, 08:16
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Ayuda con una consulta a dos tablas

Hola amigos, estoy atorado con una consulta SQL y francamente ya no doy con la forma de ejecutarla, doy vueltas y vueltas a lo mismo. Ojala alguien pierda cinco minutos y me tire un cable.

SITUACIÓN:

1.- Estoy montando una tienda virtual, en una tabla tengo las categorías de la tienda, en otra los productos.
2.- En la tabla de categorías, hay un campo numerico que identifica a cada categoría (CatId) y otro que indica si es la subcategoría de otra categoría (ParentCatId). En el campo ParentId se introduce el CatId de la categoría de la que depende, así genero un árbol de navegación.
3.- En la tabla de productos, cada producto lo relaciono con su categoría, mediante un campo llamado tambien CatId.

PROBLEMA:

1.- Al entrar en la tienda, muestro a un lado las categorías, si se escoge una categoría, muestro las subcategorías que dependen de esta, y así sucesivamente.
2.- Quiero que al hacer click sobre una categoría muestre los productos que cuelgan de esta, pero si no hubiera ninguno, pero si los hubiera en alguna subcategoría, o en una subsubcategoría, los muestre. Así siempre muestro productos relacionados con la categoría principal.


ESTRUCTURA DE LAS TABLAS

Tabla: Tienda_Cats
Id de cada categoría es el campo: CatId
Campo que relaciona cada categoría con su categoría superior de esta misma tabla: ParentCatId

Tabla: tienda_productos
Campo que relaciona a cada producto con su categoría: CatId



LA CONSULTA SQL:

Estoy probando con algo así, pero no consigo que me muestre los productos de las subcategorías relacionadas con la categoría:

SELECT tienda_productos.ProdNombre FROM ((tienda_productos LEFT JOIN tienda_impuestos ON tienda_productos.Id_impuesto = tienda_impuestos.Id_impuesto) LEFT JOIN Tienda_Cats ON Tienda_Cats.CatParentId = tienda_productos.CatId WHERE tienda_productos.CatId =" & variableCatId &" OR Tienda_Cats.CatParentId =" & variableCatId &"
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #2 (permalink)  
Antiguo 08/04/2008, 10:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Ayuda con una consulta a dos tablas

De donde han salido los impuestos? Nada no importa.

Lo que no conseguiras es el condicional que dices, "si no hay productos de la categoria que me de los de las categorias hijas" para ello tendrias que programar que se ejecute una consulta que de los productos de la categoria padre y si no da resultados otra consulta que de los de las categorias hijas.

Lo que si se puedes conseguir es que te de todos los productos de la propia categoria y de todas las hijas de primer nivel, pero creo que no es lo que te intersa...


Código:
SELECT DISTINCT tienda_productos.ProdNombre 
  FROM (tienda_productos 
    LEFT JOIN tienda_impuestos 
        ON tienda_productos.Id_impuesto = tienda_impuestos.Id_impuesto) 
        WHERE tienda_productos.CatId =" & variableCatId &" OR   
            tienda_productos.CatId IN 
                                (SELECT Tienda_Cats.CatId 
                                     FROM Tienda_Cats
                                     WHERE Tienda_Cats.CatParentId=" & variableCatId &");
esto creo que te dara todos los productos que tengan la categoria escogida y los de las categorias del nivel immediatamente inferior, claro que si en el segundo nivel de categorias tampoco tienes productos no veras los del tercer nivel...


Quim
  #3 (permalink)  
Antiguo 08/04/2008, 10:22
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Re: Ayuda con una consulta a dos tablas

Hola haber si esto te sirve:

Cita:
-- DECLARACION DE VARIABLES TIPO TABLA
DECLARE @TABLA_CATEGORIA TABLE ( INTIDCATEGORIA INT, INTIDCATEGORIAPADRE INT, VCHDESCRIPCION VARCHAR(100))
DECLARE @TABLA_PRODUCTO TABLE ( INTIDPRODUCTO INT, VCHDESCRIPCION VARCHAR(100), INTIDCATEGORIA INT)

-- LLENADO DE DATOS
INSERT INTO @TABLA_CATEGORIA VALUES( 1, 0, 'CATEGORIA 1')
INSERT INTO @TABLA_CATEGORIA VALUES( 2, 1, 'CATEGORIA 1.1')
INSERT INTO @TABLA_CATEGORIA VALUES( 3, 1, 'CATEGORIA 1.2')

INSERT INTO @TABLA_PRODUCTO VALUES( 1, 'PRODUCTO 1', 1)
INSERT INTO @TABLA_PRODUCTO VALUES( 2, 'PRODUCTO 2', 2)
INSERT INTO @TABLA_PRODUCTO VALUES( 3, 'PRODUCTO 3', 3)

-- VARIABLE IDCATEGORIA
DECLARE @IDCATEGORIA INT
SET @IDCATEGORIA = 1

-- SELECT QUE SOLO VA A DEVOLVER DATOS DE 2 NIVELES
-- DE LA CATEGORIA PADRE Y DE LOS HIJOS MAS NO DE LOS
-- NIETOS( SI LA CATEGORIA HIJO ES PADRE PARA OTRAS CATEGORIAS)
SELECT P.*
FROM @TABLA_PRODUCTO P
WHERE P.INTIDCATEGORIA = @IDCATEGORIA OR
P.INTIDCATEGORIA IN ( SELECT C.INTIDCATEGORIA
FROM @TABLA_CATEGORIA C
WHERE INTIDCATEGORIAPADRE = @IDCATEGORIA )
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #4 (permalink)  
Antiguo 09/04/2008, 04:59
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Re: Ayuda con una consulta a dos tablas

Gracias a los dos, el problema es que la base de datos la voy a migrar a MySQL (Las pruebas las hago en access) y se que MySQL no soporta consultas anidadas.

Por lo demás, ambas consultas me sirven, he probado la de quimfv y va como yo necesito (Gracias amigo). Ahora tengo que ver la forma de replantearla pero sin la consulta anidada.
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #5 (permalink)  
Antiguo 09/04/2008, 10:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: Ayuda con una consulta a dos tablas

Código:
SELECT * 
     FROM productes p 
         where idfamilia 
                in (SELECT idfamilia 
                         FROM families f 
                               where idfamilia>=39 );

Es cierto que algunas versiones de MySql no permiten consultas anidadas pero la 5.0.45-community-nt-log me acaba de ejecutar la consulta de arriba sin problemas.

Estoy usando innoDB de motor no MyISAM.

Quim
  #6 (permalink)  
Antiguo 09/04/2008, 13:53
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Re: Ayuda con una consulta a dos tablas

Muchas gracias Quimfv, cuando migre lo probaré.

Te lo agradezco mucho, sé que puede parecer una tontería, pero cuando uno se bloquea no ve ni lo que es obvio para los demás.

Te debo una, amigo!!
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
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 23:43.