sql >> Base de Datos >  >> RDS >> Mysql

MySQL:cómo obtener resultados de búsqueda con relevancia precisa

Podría usar funciones de cadena, 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;

Esto le da todas las entradas que contienen @search. Primero los que lo tienen al principio, luego los que lo tienen después de un espacio en blanco, luego por la posición de la ocurrencia, luego por orden alfabético.

name like concat(@search, '%') desc usa la lógica booleana de MySQL por cierto. 1 =verdadero, 0 =falso, por lo que ordenar de forma descendente te da verdadero primero.

Violín SQL:http://sqlfiddle.com/#!9/c6321a/1