Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - So erhalten Sie Suchergebnisse mit genauer Relevanz

Sie könnten Zeichenfolgenfunktionen verwenden, wie zum Beispiel:

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;

Dadurch erhalten Sie alle Einträge, die @search enthalten. Zuerst diejenigen, die es am Anfang haben, dann diejenigen, die es nach einem Leerzeichen haben, dann nach der Position des Vorkommens, dann alphabetisch.

name like concat(@search, '%') desc verwendet übrigens die boolesche Logik von MySQL. 1 =wahr, 0 =falsch, wenn Sie also absteigend ordnen, erhalten Sie zuerst wahr.

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