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

Query de Pagina de busqueda

Estas en el tema de Query de Pagina de busqueda en el foro de Mysql en Foros del Web. Hola a todos Estoy haciendo una web y me encuentro con un problema. Tengo un formulario de busqueda que manda los datos a la pagina ...
  #1 (permalink)  
Antiguo 11/12/2011, 22:38
(Desactivado)
 
Fecha de Ingreso: enero-2004
Mensajes: 136
Antigüedad: 20 años, 3 meses
Puntos: 0
Query de Pagina de busqueda

Hola a todos

Estoy haciendo una web y me encuentro con un problema. Tengo un formulario de busqueda que manda los datos a la pagina de paginacion.

Alli tengo creado una query en my SQL que es la siguiente:

SELECT *
FROM ads
WHERE CATEGORIA LIKE %busco% AND POBLACION LIKE %ciudad% AND NACIONALIDAD LIKE %origen% AND EDAD LIKE %ed% AND TARIFA LIKE %precio%

El problema lo tengo en los datos que recibo del campo ED. Ese campo es el relativo a la edad, y los datos que recibe la pagina de paginacion estan separados Ej: 18 19 20. Cuando realiza una busqueda por edad, no me devuelve ningun registro.

Como lo podria solucionar?


Un saludo.
  #2 (permalink)  
Antiguo 12/12/2011, 05:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query de Pagina de busqueda

Si pasas los datos separados por comas p.e. 18,19,20 y modificas la consulta

...AND EDAD LIKE %ed% ...

por

... AND EDAD IN (ed)...

lo tendrás....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 12/12/2011, 05:15
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: Query de Pagina de busqueda

Agrego yo:
Si "ED" es un campo multivaluado, estás metiendo la pata a lo grande.
Los campos multivaluados no deben existir en las base de datos relacionales. Sólo te causarán problemas.
Un campo multivaluado es un campo cuyos valores no son atómicos, e implica que existe una relación N:N entre esa tabla y otra que debería existir en el modelo. Si estás haciendo eso, sólo te estás buscando complicaciones a corto plazo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 12/12/2011, 13:57
(Desactivado)
 
Fecha de Ingreso: enero-2004
Mensajes: 136
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Query de Pagina de busqueda

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Agrego yo:
Si "ED" es un campo multivaluado, estás metiendo la pata a lo grande.
Los campos multivaluados no deben existir en las base de datos relacionales. Sólo te causarán problemas.
Un campo multivaluado es un campo cuyos valores no son atómicos, e implica que existe una relación N:N entre esa tabla y otra que debería existir en el modelo. Si estás haciendo eso, sólo te estás buscando complicaciones a corto plazo.
---------------------------------

Hola.

ED no es un campo multivaluado, solo contiene un dato que es la Edad.

El problema, es que en el formulario que utilizo para que el visitante realice la busqueda, en vez de introdocir todos los numeros de 1 a 100, utilizo una busqueda por rango de edad.

Y es aqui donde tengo dificultades. La funcion envia los datos a la pagina de paginacion donde tengo creado la query en mysql, pero no funciona correctamente.

Con la ayuda de Quimfv, he conseguido que funcione a medias Ej: Si la cadena contiene 18,19,20 Me devuelve los registros cuyo campo edad es 18 pero no asi los de 19 y 20.

Esta es la funcion que estoy utilizando para generar los rangos edad:

<?php foreach (range(18,20) as $numero) echo "$numero,"?>

Y esta la consulta en mysql

SELECT *
FROM ads
WHERE CATEGORIA LIKE %busco% AND POBLACION LIKE %ciudad% AND NACIONALIDAD LIKE %origen% AND EDAD IN (ed) AND TARIFA LIKE %precio%

Esper que me puedas ayudar.

Un saludo.
  #5 (permalink)  
Antiguo 12/12/2011, 15:28
(Desactivado)
 
Fecha de Ingreso: enero-2004
Mensajes: 136
Antigüedad: 20 años, 3 meses
Puntos: 0
Respuesta: Query de Pagina de busqueda

Cita:
Iniciado por quimfv Ver Mensaje
Si pasas los datos separados por comas p.e. 18,19,20 y modificas la consulta

...AND EDAD LIKE %ed% ...

por

... AND EDAD IN (ed)...

lo tendrás....


Hola.

He modificado segun me dijiste y hay varios problemas. El primero es que el resto de criterios de busqyeda que hay en la query dejan de funcionar , y con respecto al campo edad, solo me devuelve el registro del primer valor, el resto los ignora.

Me podias echar una mano?.



Un saludo.
  #6 (permalink)  
Antiguo 13/12/2011, 04:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query de Pagina de busqueda

Los otros criterios no deben dejar de funcionar... con lo que me dices no puedo decir nada mas.

Si pasas los valores posibles de edad separados por comas tiene que retornar TODOS los registros con valor edad en (IN) la lista de valores que le pases. En otras palabras todos los registros cuyo valor edad sea igual a uno de los de la lista. Manual

Esto

Cita:
<?php foreach (range(18,20) as $numero) echo "$numero,"?>
genera una lista con el siguiente formato

18,19,20,

esa coma del final te puede estar dando problemas....

Una alternativa si estas trabajando con un rango de edades (es decir sabes la edad minima y la maxima) es

...AND EDAD>=18 AND EDAD<=20...

tampoco tiene por que afectar el resto de criterios.

Excepto que estes mal interpratando la restricción que estas usando

Cita:
WHERE CATEGORIA LIKE %busco% AND POBLACION LIKE %ciudad% AND NACIONALIDAD LIKE %origen% AND EDAD LIKE %ed% AND TARIFA LIKE %precio%
AND (y) por lo que se deben cumplir TODAS las condiciones para que se encuentre un registro, la alternativa seria OR (o) pero eso solo tu sabes si puede funcionarte...

Una pregunta porque usas LIKE ... sobre categoria no se pero sobre POBLACION, NACIONALIDAD y TARIFA .... si se busca un precio tarifa debe ser igual al precio no parecido al precio ....

TARIFA=$precio es mas rápido y preciso... en precio esta clarisimo y en los otros creo que tambien....

Y si como se puede deducir de lo que dices de edad tambien trabajas con varios valores para cada criterio... es mejor que construyas la query dinamicamente

Código MySQL:
Ver original
  1. ...
  2. WHERE (CATEGORIA=$busco1
  3.                    OR CATEGORIA=$busco2
  4.                    OR  ... )
  5. AND (POBLACION=$ciudad1
  6.          OR POBLACION=$ciudad2
  7.          OR ....)
  8. AND (NACIONALIDAD=$origen1
  9.          OR NACIONALIDAD=$origen2
  10.          OR ...)
  11. AND EDAD>=$edadMin AND EDAD<=$edadMax
  12. AND TARIFA>=$precioMin AND TARIFA<=$precioMax
  13. ...

Fijate en los parentesis....

Sabes que POBLACION LIKE %ciudad% si ciudad es "San Lorenzo" te dara todos los San Lorenzos posibles...San Lorenzo de Almagro, San Lorenzo de El Escorial, .... e incluso uno que se llame "Playa de San Lorenzo" (este no se si existe).


Mensaje 2000
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/12/2011 a las 05:25

Etiquetas: query, select, sql, busquedas
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 11:34.