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

Buscar en campos de una tabla por palabra o frase clave

Estas en el tema de Buscar en campos de una tabla por palabra o frase clave en el foro de Mysql en Foros del Web. Hola! Tengo que hacer una consulta SQL por palabra clave o frase. ¿Cómo hago para que seleccione de la tabla, aquellos registros que tengan en ...
  #1 (permalink)  
Antiguo 30/11/2010, 06:12
 
Fecha de Ingreso: noviembre-2006
Mensajes: 199
Antigüedad: 17 años, 11 meses
Puntos: 2
Buscar en campos de una tabla por palabra o frase clave

Hola!
Tengo que hacer una consulta SQL por palabra clave o frase.
¿Cómo hago para que seleccione de la tabla, aquellos registros que tengan en algun campo (pongamos en dos de ellos, campo1 y campo2) la cadena que introduce el usuario?


Gracias!
  #2 (permalink)  
Antiguo 30/11/2010, 08:07
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 10 meses
Puntos: 8
Respuesta: Buscar en campos de una tabla por palabra o frase clave

utilizando la sentencia like en la cluasula where.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #3 (permalink)  
Antiguo 01/12/2010, 06:05
 
Fecha de Ingreso: noviembre-2006
Mensajes: 199
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: Buscar en campos de una tabla por palabra o frase clave

Gracias, con Like era la solución. Pero aún así no me funciona cuando uso Like para buscar y quiero en la misma claúsula poner una codicion. A ver si me explico con el código: Todos los que tengan la palabra Clave, y edad = 15.

$cadena = $_POST['res'];
$matriz= split("," , $cadena);
$query = "SELECT * FROM usuarios WHERE edad= '15' AND ";

for ($index = 0; $index <count($matriz) ; $index++)
{
if ($index != 0) {
$query .= " OR ";
}
$query .= " aficiones LIKE '%".$matriz[$index]."%'";

}

Me filtra los resultados, pero los de todas las edades, no sólo los de 15
¿Alguien ve el posible error?


Muchas gracias de antemano.

Última edición por ferola; 01/12/2010 a las 06:58
  #4 (permalink)  
Antiguo 01/12/2010, 08:02
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 10 meses
Puntos: 8
Respuesta: Buscar en campos de una tabla por palabra o frase clave

pruebate primero el qury y verifica que si funciones por que el like y el and si funciona pero me late que se te esta metiendo un or je jejeje.


saludos.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #5 (permalink)  
Antiguo 01/12/2010, 09:17
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 9 meses
Puntos: 447
Respuesta: Buscar en campos de una tabla por palabra o frase clave

Hola ferola, creo que el problema que tienes es debido a la jerarquía de operadores, debes recordar que un AND se evalúa primero que un OR.

Creo que tu consulta la estás dejando más o menos así:

Código MySQL:
Ver original
  1. SELECT * FROM usuarios WHERE edad= '15' AND
  2. aficiones LIKE '%afición1%' or
  3. aficiones LIKE '%afición2%' or
  4. aficiones LIKE '%afición3%'


Con esto lo que estás filtrando es todos aquellos registros que tengan edad = 15 años y la afición1 + todos los que tengan la afición2 (sin importar la edad) + todos los que tengan la afición3 (Sin importar la edad)

Creo que tu consulta debería quedar más o menos así:

Código MySQL:
Ver original
  1. SELECT * FROM usuarios WHERE edad= '15' AND
  2. (
  3. aficiones LIKE '%afición1%' or
  4. aficiones LIKE '%afición2%' or
  5. aficiones LIKE '%afición3%'
  6. )

Al agrupar todas las condiciones OR entre paréntesis obligas a que primero se evalúe esta condición y el resultado final se evalúe con la comparación de la edad

Saludos
Leo.

Etiquetas: campos, clave, frase, palabra, tablas
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 00:59.