La gente no lo suele implementar en los buscadores pero siempre queda bien hacer que cuando se busca por palabras sueltas y mete varias entre comillas se haga la búsqueda por esas exactas. Por ejemplo si buscamos gatos «bosque siberiano» lo suyo es que haga la consulta:
Where campo like '%gatos%' or campo like '%bosque siberiano%'
Lo primero es la consulta, aunque es un poco más lenta, pero es más sencillo construirla con una expresión regular:
Where campo REGEXP '(gatos|bosque siberiano)'
Y para construir la cadena a ejecutar:
// cargamos en un array las palabras entre comillas preg_match_all('/".*?"/', $_POST["search"], $matches); foreach ($matches[0] as $value) { // las palabras encontradas las borramos de la cadena original $_POST["search"] = str_replace($value, '', $_POST["search"]); } // cargamos en un array las palabras sueltas que no estaban entre comillas y las unimos a las que si lo estaban $palabras = array_merge(explode(' ', $_POST["search"]), $matches[0]); // eliminamos todos los posibles elementos vacios del array $palabras = array_filter($palabras, function($value) { return $value !== ''; }); // y los unimos con el separador | que vamos a usar en la consulta $cadena = str_replace('"', '', implode('|', $palabras)); // y ya tenemos el where $where .= sprintf(" campo REGEXP '(%s)'", mysql_escape_string($cadena));
0 Comentarios.