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

Problema con conslta

Estas en el tema de Problema con conslta en el foro de Mysql en Foros del Web. Hola quiero crear un buscador en mi web, pero nose como hacer que me busque entre entre 2 fechas lo he hecho de la siguiente ...
  #1 (permalink)  
Antiguo 18/05/2008, 06:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema con conslta

Hola quiero crear un buscador en mi web, pero nose como hacer que me busque entre entre 2 fechas

lo he hecho de la siguiente manera pero no m funciona... alguien me podria ayudar con la sintasis?? muxas asias

Cita:
SELECT `usuario` FROM `users` WHERE `activo` LIKE '1'
AND `sexo` LIKE '%'
AND `fecha_nacimiento` >='%' AND `fecha_nacimiento` <='%'
AND `pais` LIKE '%'
AND `provincia` LIKE '%';
  #2 (permalink)  
Antiguo 18/05/2008, 07:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con conslta

La parte de la fecha así:

AND `fecha_nacimiento` BETWEEN '%' AND '%'

Tú estabas buscando, no un rango, sino dos condiciones unidas por AND y que a la vez sólo puede cumplirse si las dos fechas son iguales y se trata del mismo día de la fecha_nacimiento.
  #3 (permalink)  
Antiguo 18/05/2008, 07:34
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema con conslta

Cita:
Iniciado por jurena Ver Mensaje
La parte de la fecha así:

AND `fecha_nacimiento` BETWEEN '%' AND '%'

Tú estabas buscando, no un rango, sino dos condiciones unidas por AND y que a la vez sólo puede cumplirse si las dos fechas son iguales y se trata del mismo día de la fecha_nacimiento.
No me va.... supongo que dara conficto con los otros AND... como seria la consulta completa???
  #4 (permalink)  
Antiguo 18/05/2008, 08:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con conslta

creo que así:
SELECT `usuario` FROM `users` WHERE `activo` LIKE '1'
AND `sexo` LIKE '%'
AND (`fecha_nacimiento` BETWEEN '%' AND '%' )
AND `pais` LIKE '%'
AND `provincia` LIKE '%';

Última edición por jurena; 18/05/2008 a las 08:24
  #5 (permalink)  
Antiguo 18/05/2008, 08:35
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema con conslta

Sigue sin funcionar... si kito la linea de fecha me muestra resultados, cn la de fecha no... no da error pero no m muestra nada..
supongo que la consulta que he planteado yo para hacer una busqueda no es correcta y se podra hacer de otra manera.. si alguien puede ayudarme se lo agradeceria bastante... un saludo
  #6 (permalink)  
Antiguo 18/05/2008, 09:05
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: Problema con conslta

El caracter porcentual (%) es un caracter comodín para ser usado dentro de un string, pero no tiene significado por sí mismo. Si intentas usa la consulta tal y como está planteada lo único que tendrás es un mensaje de "Incorrect data value '%' for column 'fecha_nacimiento' at row 1", simplemente porque el valor representado en la comparación es un caracter porcentual y no una fecha.
El caracter se usa colocándolo dentro de un string, sea en los extremos, o en el centro y representa literalmente cualquier cantidad de caracteres en esa posición dentro del string, mas el contenido del resto de string.
En el ejemplo, el uso más aproximado sería:
Código:
SELECT `usuario` 
FROM `users` 
WHERE `activo`= '1'
AND `fecha_nacimiento` 
BETWEEN '2007-01-01' AND `fecha_nacimiento` '2008-01-01';

He suprimido del ejemplo tres de los LIKE, porque si tu intención es -como se infiere en el caso- que tome todos los valores, ¿qué sentido tiene hacer una comparación que no filtra nada?.
Cambié el LIKE '1' porque en este caso siemrpe te devolverá el nº 1, ya que solo 1 es como (like) 1. También el comodín en las fechas por la razón que te dije. Si el tema es un rango variable de valores, o las ingresas en una variable, o defines el acotamiento de tiempo más aproximado.
Si por ejemplo, es determinados meses del año, debería ser
Código:
SELECT `usuario` 
FROM `users` 
WHERE `activo`= '1'
AND MONTH(`fecha_nacimiento`) 
IN (aquí va la lista de numeros de meses separados por comas);
__________________
¿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; 18/05/2008 a las 09:10
  #7 (permalink)  
Antiguo 18/05/2008, 09:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problema con conslta

muxas asias gnzsoloyo por esta explicacion tan detallada, pero alomjor me he explicado mal..

yo tngo una tabla para los registros en la web que contiene todos los datos de los usuarios.

quiero hacer un buscador en el que me muestre seleccionando unos parametros como un intervalo de edad, el pais, la provincia etc... todos los usuarios que concuerden con todos esos parametros. osea todos tienen k ser ciertos.
entonces en el formulario de busqueda he puesto 2inputs para poner un intervalo de edad. ejemplo 18-20
con esos datos obtengo la fecha actual y le resto 18 al año, con lo cual me saldria la fecha 1990-05-18 y lo mismo con el 20.. de hay obtengo las fechas.
pero en caso de no especificar edad, que muestre todos. por eso pongo el '%' pero mi problema es que no se como realizar esa consulta, que me devuelva todos los usuarios con esos parametros..

espero haberme explicado bien. un saludo
  #8 (permalink)  
Antiguo 18/05/2008, 11:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Problema con conslta

Laker,
creo que te sería más fácil obtener la edad desde MySQL y luego poner el rango numérico 18-20 que te traes desde los inputs en el between sin tener que hacer esa resta para averiguar el año. Con el select en MySQL ya calculas los años

SELECT ...., (YEAR(CURDATE()) - YEAR(fechanacimiento))- (RIGHT(CURDATE(),5) < RIGHT(fechanacimiento,5)) AS edad FROM tutabla...
en el where pones:
WHERE edad BETWEEN 18 AND 20
  #9 (permalink)  
Antiguo 18/05/2008, 18:51
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: Problema con conslta

Cita:
pero en caso de no especificar edad, que muestre todos. por eso pongo el '%' pero mi problema es que no se como realizar esa consulta, que me devuelva todos los usuarios con esos parametros..
Entiendo el incoveniente, y como yo lo veo la cosa tiene tres caminos:
1. Lo solucionas por medio de un Store Procedure en cuyo código resuelvas el hecho de no contar con todos los parámetros (caso para el cual el parámetro que no entre debe entrar como string vacío -no NULL-).
2. Manejas el mismo proceso en la aplicación de modo que mande una de dos formas de consulta como string: una con edades y otra sin edades.
3. Estableces un piso de edad desde el cual puedan inscribirse en la página. Este último puede ser una buena idea desde el momento en que tu página puede entonces ser categorizada por los programas de control parental. En este caso siemrpe tendrás un parámetro inicial de edad mínima.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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.