Tupale

Crear un buscador con MySQL, PHP y expresiones regulares

Este tutorial explica de una manera sencilla como hacer un buscador o simplemente realizar una consulta MySQL usando PHP, MySQL y expresiones regulares. Aunque muchos ya habrán visto tutoriales de como hacerlo usando LIKE y comodines “%” o el mas complejo MATCH AGAINTS hoy vy a explicar como usando una función regular podemos obtener resultados de frases completas sin importar la cantidad de caracteres que se interponen entre ellas.

Antes que nada vamos a definir nuestra tabla MySQL solo como ejemplo.

id		titulo			cotenido
1		Lorem ipsum		Lorem ipsum dolor sit
2		nuevo tiulo		contenido para el id 2

Suponiendo que ya saben usar PHP y MySQL simultáneamente me saltare el paso de explicar conexiones con bases de datos y cosas similares, me centrare en la consulta y en la explicación.

En el modo tradicional “LIKE” se busca la coinsidencia en las columnas y agregandoles los comodines “%” podemos hacer que funciones perfecto con busqueda de palabras.

$q = “ipsum”;
WHERE titulo LIKE ‘%$q%’
//funciona resultado id 1

De esta manera funciona perfecto pero normalmente la sbusquedas se hacen con frases no con palabras y es donde el LIKE nos da problemas:

$q =  “contenido 2”;
WHERE contenido LIKE ‘%$q%’
//no funciona

Como verán, asi no se muestran resultados pues el LIKE busca la frase exacta en cualquier parte del campo contenido, y aunque en el id se encuentran las dos palabras de la búsqueda debido a que no están seguidas como oración no lo reconoce.

Ahora si vamos con la Expresión Regular:

$espacio = ” “;
$q = “contenido 2”;
$q = str_replace($espacio, “(.*)”, $q);

WHERE contenido REGEXP ‘$q’
//funciona resultado id 2′

Como ven simplemente utilizamos la funcion regular generada para que en la busqueda no importe la cantidad de caracteres antes de la frase, o despues de la frase o ENTRE PALABRAS.

Se que muchos piensan que es mejor utilizar un explode para generar un array a partir de las palabras y pasarlas una por una a la consulta, pero esta función regular esta pensada para consultas con JOINS y demás atributos donde buscas la sensilles para mostrar un contenido.

5 comments for “Crear un buscador con MySQL, PHP y expresiones regulares

  1. 11 octubre, 2011 at 8:20 PM

    Hola, quería saber si tienes una expresión regular para la consulta que hiciste pero que también me tome las palabras por decir:

    si busco por decir loewe si alguien pone “loeve” o pone “lowe” que también salga. loewe, o si es por decir “Adolfo Dominguez” si alguien pone “Hadolfo Domínguez” que también salgan

    si tienes una expresión que me sirva te daria las gracias.

    saludos..

    • 12 octubre, 2011 at 10:47 PM

      no, he visto algunas funciones similares con ajax pero esa expresión como tal no la tengo.

  2. 10 julio, 2014 at 1:21 PM

    Sos un mounstruo man.. re bien funciona!

  3. Juan
    6 enero, 2015 at 2:16 PM

    Funciona perfecto, pero si quiero buscar águila y me devuelva resultados aguila ¿como le hago?

Deja un comentario

A %d blogueros les gusta esto: