Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível tratar hífens e espaços da mesma forma no SQL?


Como alguém sugeriu, você pode simplesmente adaptar e usar a pesquisa de texto completo.

Se você optar por seguir esse caminho, precisará habilitar a pesquisa de texto completo nos campos obrigatórios.

Presumo que você verificará post_title e post_body (?), que precisa que você execute isso;
ALTER TABLE `posts` ADD FULLTEXT KEY `post_search` (`post_title`,`post_body`);

Quando isso for feito, sua consulta de pesquisa pode ser facilmente editada para se tornar;
$sql = "SELECT * FROM `posts` WHERE MATCH(post_title,post_body) AGAINST '$search'";

Se você quiser uma correspondência melhor, também é possível atribuir uma pontuação e ordenar por isso, o que exigiria um código semelhante a este:
$sql = "SELECT *, MATCH(post_title, post_body) AGAINST ('{$search}') AS score ".
       "FROM `posts` WHERE MATCH(post_title, post_body) AGAINST ('{$search}') ORDER BY `score` DESC";

--- NOTAS

Para a pesquisa, você precisa descobrir como vai pesquisar.

Na última instância eu usei similar, eu simplesmente tinha um formulário para o termo de busca (chamado "Search") resultando em $_POST['search'] sendo enviado para o servidor.

então usei;
$search = (array_key_exists('search', $_POST) && is_string($_POST['search'])) ? mysql_real_escape_string($_POST['search'], $c) : FALSE ;
if ($search) {
    // Do the fulltext query requires (See above)
}

Como a pesquisa de texto completo desconsidera o hífen, você fica apenas com espaços, o que funciona muito bem para texto completo, se você optar por usar resultados pontuados.