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

Problema con esta consulta SQL

Estas en el tema de Problema con esta consulta SQL en el foro de Mysql en Foros del Web. Buenas, tengo la siguiente estructura de tablas (la he acortado un poco pero lo principal esta) Quisiera obtener todos los productos pertenecientes a la categoria ...
  #1 (permalink)  
Antiguo 08/07/2013, 10:51
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Problema con esta consulta SQL

Buenas,

tengo la siguiente estructura de tablas (la he acortado un poco pero lo principal esta)



Quisiera obtener todos los productos pertenecientes a la categoria id=1
No se como hacerlo y me estoy volviendo loco...

Si hago las consultas por separado se.. seria asi:

SQL1:
Código:
SELECT * FROM productos, categorias_productos 
WHERE categorias_productos.id_producto=productos.id AND categorias_productos.id_categoria=1
SQL2:
Código:
SELECT * FROM productos, subcategorias_productos, subcategorias 
WHERE subcategorias_productos.id_producto=productos.id AND subcategorias_productos.id_subcategoria=subcategorias.id AND subcategorias.id_categoria=1
La cuestion seria unificar de alguna forma estas 2 consultas en 1 sola...

A ver si me pueden echar una mano. Se lo agradecería.

Un saludo.
  #2 (permalink)  
Antiguo 09/07/2013, 05:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con esta consulta SQL

La relacion entre Productos y Categorias te esta molestando mas que ayudando.

Código MySQL:
Ver original
  1. FROM productos p
  2.             INNER JOIN
  3.                   (subcategorias-productos sp
  4.                             INNER JOIN (subcategorias s
  5.                                                       INNER JOIN categorias c
  6.                                                        ON s.id_categoria=c.id)
  7.                              ON sp.id_subcategoria=s.id)
  8.               ON p.id=sp.id_producto
  9. WHERE c.id=1;

Como puedes ver, a tabla categorias-productos no es necesaria ni en la query ni en la estructura, excepto que haya productos que pertenezcan directamente a una categoria sin pertenecer a una subcategoria.

Si ese es le caso yo antes de hacer una consulta mas complicada, lo solucionaria agregando una subcategoria "Genérica" para cada categoria y asignaria esos productos a esas nuevas subcategorias. Demanera que siempre se cumpla la relación

Producto > Subcategoria > Categoria
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 09/07/2013 a las 05:13
  #3 (permalink)  
Antiguo 09/07/2013, 08:35
Avatar de fbedia  
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: Problema con esta consulta SQL

Gracias por tu respuesta!

Probare con lo que me comentas... en cualquier caso, ya lo tengo medio apañado con un UNION entre las 2 querys que puse antes.

La tabla categorias_productos no la puedo eliminar porque como comentas, hay productos que pueden pertenecer a una categoria directamente sin pertenecer a una subcategoria... y con respecto a lo de modificar las tablas y añadir un nuevo campo, lo habia pensado pero me afectaria bastante, ya que tengo todo el backend (panel de administracion) ya creado y tendria que modificar todo :s

Voy a tratar de apañarlo con la SQL que ya casiiiii lo tengo..

Un saludo.
  #4 (permalink)  
Antiguo 09/07/2013, 08:50
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, 4 meses
Puntos: 2658
Respuesta: Problema con esta consulta SQL

Tienes dos tablas de más en ese esquema: Ni Subcategoría ni subcategoría_productos son necesarias.
Y hacer un UNION donde debería ir un JOIN llevará a una baja performance (sin contar con uso innecesario de recursos).

Me explico: Si una subcategoría se puede consiederar que es una categoría dependiente de otra, entonces ambas deben estar en la misma tabla, y la tabla tener una FK nulable que apunte a si misma.
En ese esquema, cada categoría dependiente de otra se puede obtener con un un simple JOIN a la misma tabla, usando alias. Incluso te permite construir subcategorías de subcategorías.
Ese es un esquema muy habitual en estos casos, tenlo en cuenta. No es necesario volver a inventar la rueda. Un esquema así funciona en muchísimas bases de datos comerciales, y es eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: select, sql, tabla
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 21:34.