Foros del Web » Programando para Internet » PHP »

Problemas con buscador y varias palabras

Estas en el tema de Problemas con buscador y varias palabras en el foro de PHP en Foros del Web. Hola pues eos , tengo hecho un buscador , peor cuando ingreso 2 palabras ya no me encuentra nada , si embargo si pongo solo ...
  #1 (permalink)  
Antiguo 01/09/2003, 08:32
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 15 años, 10 meses
Puntos: 2
Problemas con buscador y varias palabras

Hola pues eos , tengo hecho un buscador , peor cuando ingreso 2 palabras ya no me encuentra nada , si embargo si pongo solo 1 palabra va perfectamente.

Puede ser que los espacio no los reconozca o q?

la consulta que hago es la siguiente:
Código PHP:
$sql ="SELECT * FROM grupos WHERE (nombre_grupo LIKE '%$que%' OR pais LIKE '%$que%' OR ciudad LIKE '%$que%' OR subcategoria LIKE '%$que%' OR provincia LIKE '%$que%' OR biografia LIKE '%$que%')"
Un saludo
  #2 (permalink)  
Antiguo 01/09/2003, 09:00
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Es que estas buscando por lo que google llama 'frase exacta'. Es decir, si pones en tu buscador 'soy listo', dara como resultados donde el valor del campo contenga la cadena 'soy listo' literalmente. Es porque haces la comparacion con '%soy listo%'. Si quieres que se muestren los registros que tengan solo 'soy' o solo 'listo' o las dos en cualquier orden, deberias separar la cadena $que por los espacios con explode() (www.php.net/explode) y para cada una de las palabras tener esa clausula WHERE, unidas todas por OR. Un codigo podria ser:
Código PHP:
$palabras=explode(' ',$que);
$condicion='';
foreach (
$palabras as $palabra) {
  if (
$condicion1=''$condicion.=' OR ';
  
$condicion.="(nombre_grupo LIKE '%$palabra%' OR pais LIKE '%$palabra%' OR ciudad LIKE '%$palabra%' OR subcategoria LIKE '%$palabra%' OR provincia LIKE '%$palabra%' OR biografia LIKE '%$palabra%')";
}
$sql="SELECT * FROM grupos WHERE $condicion"
Si quieres que tengan las dos palabras, en cualquier oreden, une con AND en lugar de con OR.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 04/09/2003, 10:04
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 15 años, 10 meses
Puntos: 2
hola josemi gracias por la ayuda. lo que me pasa ahora es que cuando busco mas de 1 palabara me da error.

Sin emabargo cuando busco una me da correcto.

El codigo que tengo es este:
Código PHP:
$dbh mysql_connect("localhost""user""pass");
     
mysql_select_db ("musikaid_altas"$dbh);
$palabras=explode(' ',$que);
$condicion='';
foreach (
$palabras as $palabra) {
  if (
$condicion1=''$condicion.=' AND ';
  
$condicion.="(nombre_grupo LIKE '%$palabra%' OR pais LIKE '%$palabra%' OR ciudad LIKE '%$palabra%' OR subcategoria LIKE '%$palabra%' OR provincia LIKE '%$palabra%' OR biografia LIKE '%$palabra%')";
}
$sql="SELECT * FROM grupos WHERE $condicion";

$registros mysql_query($sql,$dbh);
    echo 
mysql_error();
$existemysql_num_rows($registros);
$resultado mysql_query($sql); 
y el error que me da cuando intento busacr mas de 1 palabra el sigueinte:

Cita:
You have an error in your SQL syntax near '(nombre_grupo LIKE '%%' OR pais LIKE '%%' OR ciudad LIKE '%%' OR subcategoria LI' at line 1You have an error in your SQL syntax near '(nombre_grupo LIKE '%%' OR pais LIKE '%%' OR ciudad LIKE '%%' OR subcategoria LI' at line 1
Un saludo
  #4 (permalink)  
Antiguo 04/09/2003, 10:16
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Nunca te fies 100% de que el codigo que te dan como respuesta esta libre de 'gazapos'. Muchos escribimos el codigo sin casi mirarlo. Por eso debes intentar entender el codigo, ver su logica. Asi puedes corregir los 'gazapo'. En este caso, mis dedazos tomaron vida propia al escribir y pusieron:
Código PHP:
if ($condicion1=''$condicion.=' AND '
cuando mi cerebro les habia dicho que escribieran:
Código PHP:
if ($condicion!=''$condicion.=' AND '
Segun parece se me escurrio el shift. Y esto demuestra que deberia haber puesto para curarme en salud:
Código PHP:
if (''!=$condicion$condicion.=' AND '
Si hubieras seguido el codigo, te hubieras preguntado por que asignaba siempre un valor dentro del if. La logica actual sirve para que en la cadena se añada el ' AND ' cuando tienes mas de una palabra.

Espero no haber tenido mas gazapos.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 04/09/2003, 15:42
Avatar de lochorui  
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 899
Antigüedad: 15 años, 10 meses
Puntos: 2
Muchas gracias Josemi ya va pefecto , creeme que busque el error peor no lo encontraba

Un saludo
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 14:31.