Foros del Web » Programando para Internet » PHP »

Consulta sql

Estas en el tema de Consulta sql en el foro de PHP en Foros del Web. Hola. Quiero hacer un sistema para buscar usuario en una base de datos, pero es q no se me ocurre como hacerlo. En mi base ...
  #1 (permalink)  
Antiguo 26/01/2010, 05:43
 
Fecha de Ingreso: mayo-2008
Mensajes: 105
Antigüedad: 15 años, 11 meses
Puntos: 0
Consulta sql

Hola. Quiero hacer un sistema para buscar usuario en una base de datos, pero es q no se me ocurre como hacerlo.

En mi base de datos tengo dos campos separados. Nombre y apellidos. ¿Como puedo hacer para que si alguien busca "Pepe Ejmplo Prueba" me busque en los dos campos?

No se si me he explicado, es q no se como montar la sentencia sql.
  #2 (permalink)  
Antiguo 26/01/2010, 05:59
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Consulta sql

Código MySQL:
Ver original
  1. SELECT * FROM usuarios WHERE nombre LIKE '%$busqueda%' OR apellido LIKE '%$busqueda%'

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #3 (permalink)  
Antiguo 26/01/2010, 06:05
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Consulta sql

Cita:
Iniciado por Hidek1 Ver Mensaje
Código MySQL:
Ver original
  1. SELECT * FROM usuarios WHERE nombre LIKE '%$busqueda%' OR apellido LIKE '%$busqueda%'

saludos
Supongo que la primera variable $busqueda se refiere al campo del nombre y la segunda al del apellido. Como las has llamado igual puede dar pie a confusión y si haces eso tal cual no va a funcionar de forma deseable. Si ponemos, por ejemplo, Pepe Fernández en la búsqueda, va a buscar alguien que tenga como nombre %Pepe Fernández% y lo mismo para el apellido... Y difícilmente ese sea el nombre o apellido de alguien. Supongo que lo has puesto con esa idea, pero sólo para matizar y que todos nos entendamos ;)

De todas formas, si el problema está en la sentencia SQL, deberías preguntar en el foro apropiado... Este foro es de PHP.
  #4 (permalink)  
Antiguo 26/01/2010, 06:07
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Consulta sql

a pero eso se soluciona facil =)

Código PHP:
Ver original
  1. $busqueda = str_replace(" ","%",$busqueda);
Código MySQL:
Ver original
  1. SELECT * FROM usuarios WHERE nombre LIKE '%$busqueda%' OR apellido LIKE '%$busqueda%'

ahora si buscan Pepe Fernández funcionara =)

PD: acabo de probar y no funciona asi como digo xD... la mejor opcion seria usar MATCH AGAINST ...

saludos!
__________________
More about me...
~ @rhyudek1
~ Github

Última edición por Hidek1; 26/01/2010 a las 06:12
  #5 (permalink)  
Antiguo 26/01/2010, 06:13
 
Fecha de Ingreso: mayo-2008
Mensajes: 105
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Muchas gracias

¿Y si buscas Juan Luis Fernandez Perez?

Tambien funcionario correctamente. Ademas, ¿Hay alguna menera de que me ordene la respuesta por relevancia?
  #6 (permalink)  
Antiguo 26/01/2010, 06:17
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Consulta sql

mira esto es lo que buscas...

Documentacion MATCH AGAINST
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 26/01/2010, 06:20
 
Fecha de Ingreso: mayo-2008
Mensajes: 105
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Muchas gracias, creo q si me puede servir, estudiare detenidamente a ver si soy capaz de usarlo.
  #8 (permalink)  
Antiguo 26/01/2010, 06:23
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Consulta sql

Cita:
Iniciado por rsb17 Ver Mensaje
Muchas gracias

¿Y si buscas Juan Luis Fernandez Perez?

Tambien funcionario correctamente. Ademas, ¿Hay alguna menera de que me ordene la respuesta por relevancia?
Tienes un campo llamado nombre y otro apellido, ¿no? Entonces, todo es mucho más fácil si buscas así.

Código SQL:
Ver original
  1. SELECT * FROM usuarios WHERE nombre LIKE '%{$nombre}%' OR apellido LIKE '%{$apellido}%'
Así debería funcionar en cualquier caso. La relevancia depende ya de tus criterios... Yo no creo que ningún resultado pueda ser más relevante que otro en este caso. Tal vez cuando un nombre coincide a la perfección (buscas "Luis Fernández" y tienes dos resultados: "Luis Fernández" y "José Luis Fernández"), pero eso ya depende de lo que tú quieras hacer...

Doy por supuesto que has tratado correctamente las variables $nombre y $apellido. ¿Conoces la forma de recoger variables de formularios y de evitar las inyecciones SQL?
  #9 (permalink)  
Antiguo 26/01/2010, 06:25
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Consulta sql

por lo que yo entendi solo tenia un campo de busqueda y tenia q hacer match con nombres o apellidos..por eso le recomende match against
__________________
More about me...
~ @rhyudek1
~ Github
  #10 (permalink)  
Antiguo 26/01/2010, 06:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 105
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Tengo dos campos en la base de datos y un unico cuadro de busqueda. Si se recoger las variables de los formularios. Y lo de como evitar inyecciones SQL no lo tengo muy claro, seria con html_entities?
  #11 (permalink)  
Antiguo 26/01/2010, 06:35
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Consulta sql

La mejor forma es Match ... against como te explicaron arriba. Primero crea un índice FULLTEXT para los campos NOMBRE Y APELLIDOS de mysql.
Luego ya podrás utilizar match (nombre,apellidos) against ($busqueda).
Buscará la cadena por separado en los dos campos, y pondrá una puntuación en un campo llamado Score, que podrás utilizar para ordenar los resultados por relevancia. Una especie de esto:
Código PHP:
Ver original
  1. SELECT * , MATCH(nombre,apellidos) AGAINST ('{$cadenaBusqueda}') as Score FROM tabla_basededatos WHERE MATCH(nombre,apellidos) AGAINST ('{$cadenaBusqueda}')  ORDER BY Score DESC

Suerte!
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #12 (permalink)  
Antiguo 26/01/2010, 06:43
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Respuesta: Consulta sql

Pues si quieres usar un único campo de búsqueda y ordenar por relevancia lo mejor va a ser el match against, como te han dicho.

Las inyecciones SQL se evitan usando la función mysql_real_escape_string antes pasar la variable a la sentencia sql.
  #13 (permalink)  
Antiguo 26/01/2010, 06:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 105
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Muchas gracias a todos. Voy a mirar a fondo el funcionamiento de match against y de paso le echare un ojo a las insercciones de sql.

Muchas gracias, habeis sido de gran ayuda.

Etiquetas: 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:25.