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

Seleccionar datos de la db que no se repitan

Estas en el tema de Seleccionar datos de la db que no se repitan en el foro de Mysql en Foros del Web. Buenas, mi problema es el siguiente, lo que pasa es que tengo una tabla que cuenta con 3 columnas que identifican 3 caracteristicas de determinados ...
  #1 (permalink)  
Antiguo 31/12/2010, 09:03
 
Fecha de Ingreso: marzo-2006
Mensajes: 36
Antigüedad: 18 años
Puntos: 0
Seleccionar datos de la db que no se repitan

Buenas, mi problema es el siguiente, lo que pasa es que tengo una tabla que cuenta con 3 columnas que identifican 3 caracteristicas de determinados productos, es algo asi:

Tabla: articulos

Código MySQL:
Ver original
  1. * |  Nombre | Color1 | Color2  | Color3  |  
  2. ---------------------------------------------------
  3. 1 |  Item1  |  Azu|  |   Rojo  |  Verde  |
  4.  --------------------------------------------------  
  5. 2 |  Item2  |  Rojo  |  Verde  |  Blanco |
  6. ------------------------------ --------------------
  7. 3 |  Item3  |  Verde |   Azul  |  Rojo   |
  8. --------------------------------------------------
  9. 4 |  Item4  |  Rojo  | Celeste |         |
  10. ----------------------------------------------------
  11. 5 |  Item4  |  Azul  |  Negro  |  Rojo   |

Lo que yo hago es que mediante un formulario anterior al ingreso a esta tabla se escoja en 3 input 3 colores para filtrar los resultados

Como haria para seleccionar a todos los items que solo tengan por ejemplo color azul y rojo.

En el imput se ingreso, por ejemplo:

$color1=rojo
$color2=azul
$color3=

Con la ayuda de un forero(muchas gracias), logre realizar esta consulta:

Código SQL:
Ver original
  1. SELECT *
  2. FROM articulos
  3. WHERE
  4.       (color1 = $color1 AND (color2 = $color2 OR color3 = $color2 OR color2 = $color3 OR color3 = $color3))
  5. OR (color1 = $color2 AND (color2 = $color1 OR color3 = $color1 OR color2 = $color3 OR color3 = $color3))
  6. OR (color1 = $color3 AND (color2 = $color1 OR color3 = $color1 OR color3 = $color2 OR color3 = $color2))
  7. OR (color2 = $color1 AND (color1 = $color2 OR color3 = $color2 OR color1 = $color3 OR color3 = $color3))
  8. OR (color2 = $color2 AND (color1 = $color1 OR color3 = $color1 OR color1 = $color3 OR color3 = $color3))
  9. OR (color2 = $color3 AND (color1 = $color1 OR color3 = $color1 OR color1 = $color2 OR color3 = $color2))
  10. OR (color3 = $color1 AND (color1 = $color1 OR color2 = $color1 OR color1 = $color2 OR color2 = $color2))
  11. OR (color3 = $color2 AND (color1 = $color1 OR color2 = $color1 OR color1 = $color3 OR color2 = $color3))
  12. OR (color3 = $color3 AND (color1 = $color1 OR color2 = $color1 OR color1 = $color2 OR color2 = $color2))

Pero el problema es que me arroja como resultado los items que tengan aunque sea uno de los colores y tambien los items que tengan mas colores(es decir me bota todos los items de color rojo y azul pero tambien los que tienen amarillo o verde por ejemplo).

Lo que yo quisiera es que solo me arrojen items que tengan rojo y azul(estrictamente).

Gracias de antemano, espero respuesta.
  #2 (permalink)  
Antiguo 31/12/2010, 09:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar datos de la db que no se repitan

Un consejo, para hacer esas consultas, crea cuatro tablas.
tabla items:
idItem | nombre
1 | item1
2 | item2
3 | item3

tabla colores
idColor | Color
1 | rojo
2 | verde
3 | azul

tabla numcolor
idNumColor | numColor
1 | color1
2 | color2
3 | color3
4 | color4

tabla coloritem
idColorItem | idItem | idColor | idNumColor
1 | 1 | 3 | 1
2 | 1 | 1 | 2
3 | 1 | 2 | 3
esta es la representación de los colores del item1, que son azul, rojo y verde. Este tipo de estructura te permitirá consultas de todo tipo sobre los datos, y serán mucho más rápidas.

Última edición por jurena; 31/12/2010 a las 10:16

Etiquetas: seleccionar
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:38.