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

¿Como mejoro esta consulta?

Estas en el tema de ¿Como mejoro esta consulta? en el foro de Mysql en Foros del Web. Chicos, buenas tardes me colaboran con una duda por fa En una consulta de 2 variables tendría que hacer 4 combinaciones para lograr las posibles ...
  #1 (permalink)  
Antiguo 12/08/2013, 10:47
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
¿Como mejoro esta consulta?

Chicos, buenas tardes me colaboran con una duda por fa

En una consulta de 2 variables tendría que hacer 4 combinaciones para lograr las posibles consultas, hasta aquí no hay problema.
Código HTML:
Ver original
  1. -- si color_prenda = todos AND size = todas
  2. SELECT * FROM articulos WHERE color = "todos" AND size = "todas"
  3.  
  4. -- si color_prenda = todos AND size <> todas
  5. SELECT * FROM articulos WHERE color = "todos" AND size = size_prenda
  6.  
  7. -- si color_prenda <> todos AND size = todas
  8. SELECT * FROM articulos WHERE color = color_prenda AND size = "todas"
  9.  
  10. -- si color_prenda <> todos AND size <> todas
  11. SELECT * FROM articulos WHERE color = color_prenda AND size = size_prenda

El problema que tengo es cuando la consulta tiene 6 variables, lo cual da como resultado 36 posibles consultas.

¿Se puede hacer de una forma dinámica y simplificada esta consulta?


Gracias
  #2 (permalink)  
Antiguo 12/08/2013, 12:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ¿Como mejoro esta consulta?

ese no es un problema de MySQL realmente. La consulta es una cadena que puedes modificar mediante programación de acuerdo con los datos que te llegan de los selectores, inputs tipo text, etc. Pasas los valores de las variables que recoges. Si de alguno de los selectores,inputs, etc., no se envía nada o se envía "todos" (parece que así lo haces tú), no añadas esa parte a la cadena de de la consulta.
  #3 (permalink)  
Antiguo 12/08/2013, 18:00
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Como mejoro esta consulta?

jurena, no entiendo tu respuesta, yo tomo los valores de los select y los coloco en la consulta, el problema es cuando se elije la opcion todos en los select.

¿No se como hacerlo mas simplificado y dinamico?

¿Alguna idea?
  #4 (permalink)  
Antiguo 13/08/2013, 02:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ¿Como mejoro esta consulta?

Verás, elegir todos es un campo es no establecer filtro. Me explicaré con algunos de tus ejemplos:
1) -- si color_prenda = todos AND size = todas
Código MySQL:
Ver original
  1. SELECT * FROM articulos WHERE color = "todos" AND size = "todas"
esto equivale a
Código MySQL:
Ver original
  1. SELECT * FROM articulos

2)
Código MySQL:
Ver original
  1. SELECT * FROM articulos WHERE color = "todos" AND size = size_prenda

y esto equivale a
Código MySQL:
Ver original
  1. SELECT * FROM articulos WHERE size = size_prenda

Observa que cuando el valor que pasas por la variable es "todos" o "todas", simplemente no tienes que filtrar por ese campo

Así de fácil. Prueba y nos dices. Luego hay que controlar cuando todos tienen "todos" se puede usar las sintaxis del filtro así:
WHERE 1

Para el modo de hacerlo, puedes pedir ayuda en el foro de programación, pues aquí solo podemos darte respuestas de bases de datos y de lenguaje de consulta SQL. No olvides que la cadena de consulta, la sintaxis de la consulta debes hacerla con programación según los datos que te llegan del formulario.

Última edición por jurena; 13/08/2013 a las 02:18
  #5 (permalink)  
Antiguo 13/08/2013, 11:08
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Como mejoro esta consulta?

jurena, gracias por su tiempo y paciencia.

Lo que tú me dices me queda claro, lo que me preocupa es que si para una consulta de dos select debo hacer 4 consultas (ver ejemplo), para 6 select, tendría que hacer 36 consultas, una para cada combinación.

Código HTML:
Ver original
  1. -- si color_prenda = todos AND size = todas
  2. SELECT * FROM articulos
  3.  
  4. -- si color_prenda = todos AND size <> todas
  5. SELECT * FROM articulos WHERE size = size_prenda
  6.  
  7. -- si color_prenda <> todos AND size = todas
  8. SELECT * FROM articulos WHERE color = color_prenda
  9.  
  10. -- si color_prenda <> todos AND size <> todas
  11. SELECT * FROM articulos WHERE color = color_prenda AND size = size_prenda
Mi pregunta es: ¿Tengo que hacer las 36 consultas, existe otra forma más dinámica, en la cual no deba hacer tantas consultas?
  #6 (permalink)  
Antiguo 13/08/2013, 11:16
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: ¿Como mejoro esta consulta?

lo que tu consulta hace es realizar los querys de acuerdo a los filtros que indicas, verdad...?? y porque no insertas esos resultados en tablas temporales que luego vas filtrando de acuerdo a los nuevos criterios que le das, y al final solo te quedas con los datos que quieres....creo que eso es lo que estoy entendiendo...o quizas estoy equivocado....
  #7 (permalink)  
Antiguo 13/08/2013, 11:23
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: ¿Como mejoro esta consulta?

Supongo que si son consultas de usuario, entonces ellos no van a entrar a realizarlas directamente a la BD sino a un programa que hayas diseñado.

Si es así, no vas a tener que hacer 36 o n consultas, simplemente luego que llenen los campos que necesiten, armas la consulta con los campos que se han llenado donde solo a puro if (no corresponde a BD) podes realizar la misma.

Tu pregunta siento que no es problema de BD sino de pura programación para mostrar el resultado que la persona solicita.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #8 (permalink)  
Antiguo 13/08/2013, 13:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Como mejoro esta consulta?

Chicos, tal vez no me he hecho enteder.

Tengo una base de datos en la cual realizo consultas o querys. Para hacer las consultas tengo un formulario con 2 select para filtrar la consulta.

Los select son color_prenda (rojo,azul,amarillo o todos) y size color_prenda (grande, medio, pequeño o todos)

Si quiero una consulta de un color especifico y una talla especifica debo hacer la consulta asi:

Código HTML:
Ver original
  1. SELECT * FROM articulos WHERE color = color_prenda AND size = size_prenda.

Si necesito una consulta que involucre la opcion "todos" tanto en color_prenda y size_prenda se complica ya que debo tener una consulta para cada posible combinacion asi:

Código HTML:
Ver original
  1. -- si color_prenda = todos AND size = todas
  2. SELECT * FROM articulos
  3.  
  4. -- sino color_prenda = todos AND size <> todas
  5. SELECT * FROM articulos WHERE size = size_prenda
  6.  
  7. -- sino color_prenda <> todos AND size = todas
  8. SELECT * FROM articulos WHERE color = color_prenda
  9.  
  10. -- sino color_prenda <> todos AND size <> todas
  11. SELECT * FROM articulos WHERE color = color_prenda AND size = size_prenda
  12.  
  13. fin-sino

Con 2 variables (2 select) debo hacer 4 consultas diferentes para que me funcione en todos los casos posibles.

Mi pregunta es: ¿Si tengo 6 variables (6 select) debo hacer 36 consultas distintas?
  #9 (permalink)  
Antiguo 13/08/2013, 14:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: ¿Como mejoro esta consulta?

Lo harás todo con una única consulta, pero para la parte dinámica te ayudarás del programa que uses. Deberás pedir ayuda en el foro de programación. Esto es algo muy normal. Te pondré un ejemplo, pero pregunta allí.

selector color(todos, rojo, blanco, azul) que devuelve la variable color con el valor elegido
selector size (todos, grande, mediano, pequeño) que devuelve la variable size con el valor elegido

cadenaconsulta = "SELECT * FROM tutabla WHERE 1

si selector la variable color = todos, no añado nada a esa cadenaconsulta
si selector la variable color es distinto de todos, añado
" AND color = @color"

si selector size = todos, no añado nada a la consulta
si selector size es distinto de todos, añado.
" AND size = @size"

Pero no te entretengas en este foro. Pide ayuda en el foro de tu programa, PHP o el que sea y te ayudarán allí. Verás que es fácil, y no, solo lanzarás una consulta que se armará de acuerdo con los valores devueltos por el formulario que montes para la elección de criterios.

Etiquetas: select
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 04:51.