Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL - Come ottenere risultati di ricerca con pertinenza accurata

Potresti usare funzioni di stringa, come:

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;

Questo ti dà tutte le voci che contengono @search. Prima quelli che ce l'hanno all'inizio, poi quelli che ce l'hanno dopo uno spazio vuoto, poi dalla posizione dell'occorrenza, poi in ordine alfabetico.

name like concat(@search, '%') desc usa la logica booleana di MySQL tra l'altro. 1 =vero, 0 =falso, quindi ordinare questo discendente ti dà prima vero.

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