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

error en consulta sql

Estas en el tema de error en consulta sql en el foro de Mysql en Foros del Web. Hola, intento hacer una consulta sql donde le paso varios valores pero algunos de los valores aveces tienen un valor vacio, la consulta que probe ...
  #1 (permalink)  
Antiguo 30/04/2013, 15:30
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
error en consulta sql

Hola, intento hacer una consulta sql donde le paso varios valores pero algunos de los valores aveces tienen un valor vacio, la consulta que probe es esta:

Código MySQL:
Ver original
  1. FROM `usuarios`
  2. WHERE `nombre` LIKE '%andres%'
  3. AND `edad` =25
  4. AND `estado` =''

no me funciona, lo que intento que me muestre la consulta es todos los usuarios con el nombre andres y edad 25 pero en este caso el estado no le paso ningun valor, osea que en esta consulta tendria que ignorar el estado dependientemente de su contenido, pero en cambio aveces si se le puede pasar un valor a estado y no pasarle ningun valor a edad, esto lo hago con programacion ya que los valores se pasan a traves de un formulario, pero mi duda es esa que el campo edad y estado pueden o no tener un valor en el momento de hacer la consulta probando como en el ejemplo que puse representa que estado tiene que tener un valor vacio pero eso no quiero simplemente tendria que ignorarlo si tiene un valor vacio.

Esto es posible solo con sql o hay que programar?
Saludos.
  #2 (permalink)  
Antiguo 30/04/2013, 18:16
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: error en consulta sql

Cita:
no me funciona, lo que intento que me muestre la consulta es todos los usuarios con el nombre andres y edad 25 pero en este caso el estado no le paso ningun valor
Por empezar, la consulta no tiene ningún error, pero no tienes ningún registro que cumpla con los tres parámetros que pones, y en esto tienes que tener claro una cosa: cuando pones AND los parámetros son obligatorios, no opcionales. Si no se cumple uno, no devuelve nada.
Cita:
osea que en esta consulta tendria que ignorar el estado dependientemente de su contenido
No, no tiene que ingorarlo, porque eso no sería AND, sería OR.
Cita:
esto lo hago con programacion ya que los valores se pasan a traves de un formulario, pero mi duda es esa que el campo edad y estado pueden o no tener un valor en el momento de hacer la consulta
En ese caso simplemente estás construyendo mal la consulta.
Cuando tienes varios parámetros entrantes por formulario, pero no todos llegan con datos, lo que se hace es excluir en la construcción de la consulta la parte del SQL que correspondería al valor faltante.
Es decir, deberías haber mandado esto:
Código MySQL:
Ver original
  1. FROM `usuarios`
  2. WHERE `nombre` LIKE '%andres%'
  3.     AND `edad` =25
¿Como se hace eso?
Validando los datos que el usuario ingresa y agregando el parametro sólo si contiene un dato a usar.

Ahora, si bien es posible usar OR para todos los casos, eso puede devolverte resultados que no son los deseados, así que no lo recomendaría.

Finalmente, el tema de cómo crear el código para construir la consulta no es tema de este foro. Pregunta cómo se hace en el foro del lenguaje que usas.
__________________
¿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 02/05/2013, 03:14
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: error en consulta sql

Hola gnzsoloyo, gracias por tu colaboracion, en primer lugar perdonar por el titulo tienes razon no es el apropiado ya que la consulta es correcto solo que no hace lo que yo quiero, referente a mi problema debido a que con programacion hay que hacer muchos condicionales debido a las distintas posibilidades que tendria pense al final hacerlo con las expresiones regulares osin de esta forma solo tengo que cambiar en cada en la sql si tiene valor cambiar la expresion regular por el valor a buscar de esta forma solo tendria que hacer un condicional para cada campo de formulario.

Aunque intentare buscar una solucion mas eficaz con programacion ya que la consulta si lo hago con programacion deberia ir mas rapido.

Saludos.

Última edición por azaz; 02/05/2013 a las 04:01
  #4 (permalink)  
Antiguo 02/05/2013, 05:34
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: error en consulta sql

Cita:
referente a mi problema debido a que con programacion hay que hacer muchos condicionales
La cosa pasa no por evitar es hacer mucha programación, sino una programación correcta, detallada. Lleva tiempo, pero es necesaria.
Yo he tenido que en cierta ocasión crear la validación para los datos de una tabla con 109 campos, y en realidad todo el tiempo que me llevó crear las validaciones me lo ahorré en dolores de cabeza luego. Lo sé porque esas validaciones las hice en un día, luego de perder tres semanas de trabajo para tratar de hacer algo como lo que pretendes.
No es una buena forma.
Prorgamáticamente es muy sencillo preparar una función que construya los parámetros adecuados para una consulta SQL. En cambio haceruna consulta multiuso sólo hará que proceses cosas innecesariamente, para obtener más resultados de los que necesitas.
Terminarás pagando con performance. Pero eso es tu decisión.
Cita:
pense al final hacerlo con las expresiones regulares osin de esta forma solo tengo que cambiar en cada en la sql si tiene valor cambiar la expresion regular por el valor a buscar de esta forma solo tendria que hacer un condicional para cada campo de formulario.
Expresiones regulares son una mala idea para usar con datos numéricos. Eso ni lo consideraría. Sólo tienen sentido en búsquedas de texto (te aclaro que numeros y texto no tienen los mismos algoritmos internos en el kernel del DBMS, porque no se almacenan de la misma forma.
La búsqueda por aproximación de un valor numérico hará que en realidad devuelva cosas que no pertenecen a lo buscado.

- Los números sólo pueden tener:
1) valor finito
2) rangos de valor.
3) series de valores
4) grupos.
Por eso hay tres formas de definirlos en SQL:
Código MySQL:
Ver original
  1. WHERE campo = valor...
  2. WHERE campo BETWEEN valor1 AND valor2...
  3. WHERE campo IN(1, 2, 3, 4, 5... ) ...
Una más es una extensión de la última:
Código MySQL:
Ver original
  1. WHERE campo IN (SELECT valor FROM tabla ...) ...

En vez de esto, usar expresiones regulares implcia conversiones no siempre felices del contenido de los campos numericos a VARCHAR... con resultados inciertos.

Pero te insisto: Esto es mucho más sencillo de crear en programación de lo que piensas. Piensa que un formulario de entrada para consultas siempre tiene una cantidad finita de campos, por lo que cada uno de los formularios puede validarse para crear la cosnulta correctamente.
Si quieres que te asistan en programación te paso el post para el foro del lenguaje que corresponda.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 02/05/2013 a las 05:54

Etiquetas: campo, select, sql
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 03:05.