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

Consulta que me esta volviendo locoo

Estas en el tema de Consulta que me esta volviendo locoo en el foro de Mysql en Foros del Web. A ver, tengo una tabla donde estan los atributos (tallas, colores, etc...) de los productos de una tienda virtual. Esta tabla tiene la siguiente estructura: ...
  #1 (permalink)  
Antiguo 06/07/2011, 13:17
 
Fecha de Ingreso: enero-2010
Ubicación: Calorrr
Mensajes: 14
Antigüedad: 14 años, 3 meses
Puntos: 0
Consulta que me esta volviendo locoo

A ver, tengo una tabla donde estan los atributos (tallas, colores, etc...) de los productos de una tienda virtual.

Esta tabla tiene la siguiente estructura:

ID | ATRI_ID | PROD_ID | VALOR

1 | 1 | 1 | ROJO
2 | 1 | 1 | VERDE <--- ESTOS DOS EJEMPLOS DE COLORES

3 | 2 | 1 | PEQUEÑA
4 | 2 | 1 | MEDIANA <---- Y ESTOS DOS DE TALLAS


Mi "gran" problema es que no soy capaz de realizar una consulta que me diga la id del producto COLOR VERDE y TALLA MEDIANA....

Creo que lo he explicado bien, a estoy hay que sumale que son mas atributos y obviamente muchisimos mas productos ha ha ha

Si alguien me puede ayudar se lo agradeceria en el alma!!

IMPORTANTE: en la consulta tengo que poner algo del estilo: SELECT * FROM atributos WHERE atri_id=1 AND valor=verde AND atri_id=2 AND valor=mediana para que me saque los productos verdes y de talla mediana...
  #2 (permalink)  
Antiguo 06/07/2011, 13:35
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, 5 meses
Puntos: 2658
Respuesta: Consulta que me esta volviendo locoo

Código MySQL:
Ver original
  1. SELECT P1.ID, P1.ATRI_ID, P1.PROD_ID, P1.VALOR, P2.VALOR
  2. FROM productos P1 INNER JOIN productos P2 ON P1.PROD_ID = P2.PROD_ID
  3. WHERE P1.ATRI_ID = 1 AND P2.ATRI_ID = 2
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/07/2011, 13:51
 
Fecha de Ingreso: enero-2010
Ubicación: Calorrr
Mensajes: 14
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Consulta que me esta volviendo locoo

Perdona mi ignorancia, de donde salen los P1 Y P2... y esto serviria para más atributos o solo para dos??

Y donde pongo los valores que estoy buscando?

He probado con esto:

SELECT P1.ID, P1.ATRI_ID, P1.PROD_ID, P1.VALOR, P2.VALOR
FROM productos P1 INNER JOIN productos P2 ON P1.PROD_ID = P2.PROD_ID
WHERE (P1.ATRI_ID = 1 AND P1.VALOR='verde') AND (P2.ATRI_ID = 2 AND VALOR='mediana')

y me dice: Column 'VALOR' in where clause is ambiguous

Última edición por danigr; 06/07/2011 a las 14:01
  #4 (permalink)  
Antiguo 06/07/2011, 14:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta que me esta volviendo locoo

Con permiso del compañero gnzsoloyo:

P1 y P2 son alias para la tabla PRODUCTOS ya que tienes una especie de relación circular

Código:
FROM productos P1 INNER JOIN productos P2 
en cuanto al error de tu consulta, este se debe a que cuando pones esto:

Código:
VALOR='mediana'
no especificas a qué tabla se refiere el campo VALOR, y este existe tanto en P1 como en P2, por lo tanto es necesario que especifiques también el alias de la tabla correspondiente.

Código:
P1.VALOR = 'mediana'             o             P2.VALOR = 'mediana'
Ahora bien, no entiendo qué ID es el que tiene que regresar tu consulta, puedes probar con esto, pero no sé si es lo que estás buscando

Código MySQL:
Ver original
  1. mysql> create table TuTabla (ID int, ATRI_ID int, PROD_ID int,
  2.     -> VALOR varchar(10));
  3. Query OK, 0 rows affected (0.83 sec)
  4.  
  5. mysql> insert into TuTabla values
  6.     -> (1, 1, 1, 'ROJO'),
  7.     -> (2, 1, 1, 'VERDE'),
  8.     -> (3, 2, 1, 'PEQUEÑA'),
  9.     -> (4, 2, 1, 'MEDIANA');
  10. Query OK, 4 rows affected (0.14 sec)
  11. Records: 4  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> select T1.PROD_ID from TuTabla T1
  14.     -> inner join TuTabla T2 on T1.PROD_ID = T2.PROD_ID
  15.     -> where T1.VALOR = 'VERDE' and T2.VALOR = 'MEDIANA';
  16. +---------+
  17. | PROD_ID |
  18. +---------+
  19. |       1 |
  20. +---------+
  21. 1 row in set (0.06 sec)

T1 y T2 al igual que P1 y P2 son alias de la misma tabla.

Si no es lo que quieres obtener te pediría que nos explicaras mejor cuál es la salida que estás esperando.

Saludos.
Leo.
  #5 (permalink)  
Antiguo 06/07/2011, 15:05
Avatar de verinchi  
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires
Mensajes: 647
Antigüedad: 19 años, 7 meses
Puntos: 2
Respuesta: Consulta que me esta volviendo locoo

Creo comprender cual es tu problema.

Cuando decís
Cita:
Mi "gran" problema es que no soy capaz de realizar una consulta que me diga la id del producto COLOR VERDE y TALLA MEDIANA....
Estas refiriendote a un ejemplo... supongo que el talle y el color llegaran de un parámetro de alguna aplicación... que no estás trabajando directamente con la base de datos.

Pero supongamos que si.

Lo que no debes perder de vista es LO QUE QUERÉS OBTENER EN EL RESULTADO.

Esto es:
Cita:
SELECT * FROM atributos WHERE atri_id=1 AND valor=verde AND atri_id=2 AND valor=mediana
Estas pidiendo todos los registros de color verde, talla mediana con el id de atributo 1 mmmm creo que no sería el objetivo de tu consulta.

Yo haría:

SELECT PROD_ID, VALOR FROM ATRIBUTOS WHERE (ATRI_ID=1 AND VALOR='VERDE') AND (ATRI_ID=2 AND VALOR='MEDIANA')


De esta manera, el codigo del producto te va a aparecer más de una vez, porque... segun la estructura de tu tabla, tenes un registro para indicar que es verde, y otro para que es mediano... y así por todos los atributos.

Te recomendaria, si está a tu alcance, normalizar los datos para tener:

-Una tabla productos
-Una tabla por cada atributo.
-Una relacional de productos/atributos

Por lo menos.

Esero haber sido de ayuda
__________________
Why can't we not be sober?
www.partitorium.com.ar

Última edición por verinchi; 06/07/2011 a las 15:07 Razón: Copie y pegué mal para las citas, había quedado confuso
  #6 (permalink)  
Antiguo 06/07/2011, 18:28
 
Fecha de Ingreso: junio-2008
Mensajes: 122
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Consulta que me esta volviendo locoo

Creo que el problema se resuelve con lo que sugiere verinchi.

Por ahi lo que deberias tener en total son 4 tablas.
Una de colores, otra de talles, otra de productos y finalmente una con las relaciones de las 3.

Entonces vos podrias decir que X producto tiene X talle y X color en la 4ta tabla, se entiende?

Etiquetas: select, 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 16:23.