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)";
}
?>
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:
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, VARIABLE = "EL SOL ARIO"
EL=2 caracteres
SOL=3 caracteres
ARIO=4 caracteres
EL=2 caracteres
SOL=3 caracteres
ARIO=4 caracteres
Cita:
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 VARIABLE = "EL MAR"
EL=2 caracteres
MAR=3 caracteres
EL=2 caracteres
MAR=3 caracteres
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