Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2014, 21:16
Avatar de loncho_rojas
loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 2 meses
Puntos: 175
Problema de búsqueda aplicando explode srtlen count

Buenas gente, ojalá pueda darme a entender, y ojala tenga una manita ya que no se si es o no complejo lo que requiero.

Necesito crear una funcionalidad en una búsqueda. Es simple, la primera parte funciona perfecta, pero no logro hilar una segunda parte. vamos por secciones.

Cuando alguien introduce parametros para una búsqueda lo que hago es, contar cuantas palabras fueron introducidas y si es una sola, hago una búsqueda con LIKE de MYSQL... y si tiene más de 1 palabra, hago una búsqueda con MATCH AGAINST, todo tratando de optimizar mis búsquedas, y me funciona.. lo hago asi.:

Código PHP:
<?php
//recibo una variable cualqueira
$variable $_GET['var'];
//divido las palabras por espacios
$words=explode(" ",$variable);
//cuento la cantidad de palabras
$numero=count($words);

//si el numero de palabras es 1 buscamos con LIKE
if($numero == 1) {


$sql="SELECT * FROM musicas WHERE titulo LIKE '%$variable%' ";


}elseif(
$numero 1) {//si el numero de palabras mayor a 1 buscamos con MATCH


$sql="SELECT * FROM musicas WHERE MATCH (titulo) AGAINST ('$variable' IN BOOLEAN MODE)";

}
?>
Todo genial, funciona, pero, si habilita la búsqueda por MATCH AGAINST tiene un problema, que es el siguiente.

Si existiera una música llamada "EL SOL", y una persona ingresa esa misma palabra, no la va a encontrar, ya que el MATCH AGAINST solo admite búsquedas relevantes a partir de palabras con 4 caracteres. y en ambos casos, la frase "EL SOL" no cumple con esos parámetros, porque EL=2 caract. y SOL=3 caract., sin embrago el título de la música si existe así mismo en la BD.

Se me ocurrió que se puede hacer un siguiente paso, y aquí es donde necesito ayuda.

Cuando se busque una variable, contar cuantas palabras existen en la búsqueda como venía haciendo, pero si es más de 1 palabra, que primero me cuente la cantidad de caracteres que tiene cada palabra.. creo que un STRLEN puede funcionar.. ej.:

Cita:
VARIABLE = "EL SOL ARIO"
EL=2 caracteres
SOL=3 caracteres
ARIO=4 caracteres
es decir, reconocer que si en la frase insertada existe o existen palabras que tienen más de 3 caracteres, que busque sin dramas con MATCH AGAINST,

Cita:
VARIABLE = "EL MAR"
EL=2 caracteres
MAR=3 caracteres
pero si entre todas las palabras de la frase no superan los 3 caracteres que busque por LIKE pero con cada una de las palabras insertadas tipo

WHERE titulo LIKE 'EL' OR titulo LIKE 'MAR'... o con AND como nexo, no se que me convendría.

Y así dependiendo de cada palabra insertada... eso es lo que no se me ocurre como puedo lograr.

Me podrían dar una idea, o ayudarme a armar la rutina con lo que ya tengo... gracias, y atento ante cualquier consulta
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 04/06/2014 a las 21:23