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

¿Como puedo mejorar y simplificar esta consulta?

Estas en el tema de ¿Como puedo mejorar y simplificar esta consulta? en el foro de Bases de Datos General en Foros del Web. Chicos me dan una manito por favor si es posible Tengo una base de datos en la cual realizo consultas o querys. Para hacer las ...
  #1 (permalink)  
Antiguo 13/08/2013, 16:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
¿Como puedo mejorar y simplificar esta consulta?

Chicos me dan una manito por favor si es posible

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)

Me da como resultado 4 consultas diferentes 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

¿Puedo simplificar y dinamizar este pequeño script en una sola consulta?

Lo pregunto por que necesito hacer uno con 6 select y no quiero hacer 36 consultas diferentes

Gracias
  #2 (permalink)  
Antiguo 13/08/2013, 18:11
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: ¿Como puedo mejorar y simplificar esta consulta?

Cita:
Iniciado por isabelramirezmontoya Ver Mensaje
Chicos me dan una manito por favor si es posible

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)

Me da como resultado 4 consultas diferentes 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

¿Puedo simplificar y dinamizar este pequeño script en una sola consulta?

Lo pregunto por que necesito hacer uno con 6 select y no quiero hacer 36 consultas diferentes

Gracias
no postees código sql en el foro de php. a mi también me ha ocurrido pero se va aprendiendo a ir directo a los problemas. en tu caso hubiera bastado preguntar cómo hacer una consulta dinámica.

sí, puedes y debes hacerla dinámica.

para ello lo único que necesitas es algo parecido a esto

Código PHP:
Ver original
  1. //con OR IS NOT NULL le indicas a mysql que según el where es o el valor de la
  2.  
  3. //variable y si esta no coincide con ninguno entonces que escoja según el segundo caso
  4.  
  5. //si ninguno coincide entonces te devolverá todos los resultados que contengan algo excepto la nada, null
  6.  
  7. SELECT * FROM articulos WHERE color = ".$color_prenda." OR color IS NOT NULL AND size = ".$boton_size_prenda." OR size IS NOT NULL";

ya a partir de ahí tienes que ver cómo dar valor a esas variables, que supongo que esas consultas las tendrás dentro de una función o un método de una clase.

intentalo por tu cuenta.
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 13/08/2013, 19:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Como puedo mejorar y simplificar esta consulta?

guardarmicorreo, gracias por tu tiempo y paciencia

Me perdi en tu respuesta que pena.

Te pregunto, en el ejemplo que escribo en la parte de abajo, como puedo hacer para que en el caso de que la variable $color_prenda sea "todos" en la consulta entren todos.
Código HTML:
Ver original
  1. SELECT * FROM articulos WHERE color = ".$color_prenda."
  #4 (permalink)  
Antiguo 13/08/2013, 19:50
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: ¿Como puedo mejorar y simplificar esta consulta?

Cita:
Iniciado por isabelramirezmontoya Ver Mensaje
guardarmicorreo, gracias por tu tiempo y paciencia

Me perdi en tu respuesta que pena.

Te pregunto, en el ejemplo que escribo en la parte de abajo, como puedo hacer para que en el caso de que la variable $color_prenda sea "todos" en la consulta entren todos.
ya te lo dije, pero creo que no fuí claro.

en otras palabras

Cita:
Código HTML:
Ver original
  1. SELECT * FROM articulos WHERE color = ".$color_prenda."
ahí estás diciendo que escoja todos los campos de la tabla artículos donde color es igual a la variable.

con IS NOT NULL estás diciendo que si el valor de la variable no coincide con ningún valor del campo color entonces escoja cualquiera que no sea vacío/null.

por lo que la consulta te quedaría así

Código PHP:
Ver original
  1. SELECT * FROM articulos WHERE color = ".$color_prenda." OR preda IS NOT NULL AND size=".$size_prenda." OR size IS NOT NULL;


entonces estarías diciendo algo así:

selecciona todos los campos de la tabla articulos

donde el color sea igual a la variable color_prenda O sino (en caso de que la variable no exista por no haber sido definida o porque contiene un valor que no existe en la tabla) cualquier campo (todo aquel) que no esté vacío
Y también que size sea igual a la variable size_prenda O sino (en caso de que la variable no exista por no haber sido definida o porque contiene un valor que no existe en la tabla) cualquier campo (todo aquel) que no esté vacío.

¿mejor?

ya el resto te invito a que lo pienses por ti misma y si tienes dudas pregunta.
__________________
Ayúdame a hacerlo por mi mismo.
  #5 (permalink)  
Antiguo 14/08/2013, 16:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Como puedo mejorar y simplificar esta consulta?

guardarmicorreo, te molesto nuevamente.

Estoy probando con una sola variable pero no me funciona

Los registros existentes en esta campo de la tabla son rojo=20, azul=30, amarillo=90 sin importar el color que le coloque a la variable $color_prenda siempre salen todos, 140.

Código HTML:
Ver original
  1. SELECT * FROM articulos WHERE color = ".$color_prenda." OR color IS NOT NULL;

¿Que tengo mal?
  #6 (permalink)  
Antiguo 14/08/2013, 18:47
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: ¿Como puedo mejorar y simplificar esta consulta?

Cita:
Iniciado por isabelramirezmontoya Ver Mensaje
guardarmicorreo, te molesto nuevamente.

Estoy probando con una sola variable pero no me funciona

Los registros existentes en esta campo de la tabla son rojo=20, azul=30, amarillo=90 sin importar el color que le coloque a la variable $color_prenda siempre salen todos, 140.

Código HTML:
Ver original
  1. SELECT * FROM articulos WHERE color = ".$color_prenda." OR color IS NOT NULL;

¿Que tengo mal?
me equivoqué de lleno, la consulta tendrás que regularla con php.

de modo que si no se ha seleccionado ningún botón entonces que la variable tenga como valor IS NOT NULL sin el OR, si el botón tiene algún valor que no sea nullo entonces que te muestre según lo que esa variable contenga.

hay que regularlo con php y no con mysql. te pido disculpas.
__________________
Ayúdame a hacerlo por mi mismo.
  #7 (permalink)  
Antiguo 15/08/2013, 07:37
 
Fecha de Ingreso: noviembre-2010
Mensajes: 204
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Como puedo mejorar y simplificar esta consulta?

No te preocupes guardarmicorreo

En conclusion, para poder filtrar la consulta debo hacer varios filtros con php para que se realice la consulta deseada.

Si tengo 2 variables debo hacer 4 consultas asi:

Si var1=todos y var2=todos
selec...
si var1<>todos y var2=todos
selec...
si var1=todos y var2<>todos
selec...
si var1=todos y var2=todos
selec...
fin

y asi con los demas

Si tengo 3 variables debo hacer 9 filtros php para hacer la consulta deseada
Si tengo 4 variables debo hacer 16 filtros php para hacer la consulta deseada
Si tengo 5 variables debo hacer 25 filtros php para hacer la consulta deseada
Si tengo 6 variables debo hacer 36 filtros php para hacer la consulta deseada

Pense que existia otra forma mas simplificada de hacerlo

Etiquetas: formulario, mejorar, php, select, simplificar
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:10.