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

MySQL - Como obter resultados de pesquisa com relevância precisa


Você pode usar funções de string, como:
select id, name
from subjects
where name like concat('%', @search, '%')
order by 
  name like concat(@search, '%') desc,
  ifnull(nullif(instr(name, concat(' ', @search)), 0), 99999),
  ifnull(nullif(instr(name, @search), 0), 99999),
  name;

Isso obtém todas as entradas contendo @search. Primeiro os que o têm no início, depois os que o têm depois de um branco, depois pela posição da ocorrência, depois por ordem alfabética.

name like concat(@search, '%') desc usa a lógica booleana do MySQL a propósito. 1 =verdadeiro, 0 =falso, portanto, ordenar essa ordem decrescente fornece verdadeiro primeiro.

violino SQL:http://sqlfiddle.com/#!9/c6321a/1