sql >> Database >  >> RDS >> Mysql

MySQL - Hoe u zoekresultaten krijgt met nauwkeurige relevantie

U kunt tekenreeksfuncties gebruiken, zoals:

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;

Hiermee krijgt u alle vermeldingen die @search bevatten. Eerst degenen die het aan het begin hebben, dan degenen die het na een spatie hebben, dan door de positie van het voorkomen, dan alfabetisch.

name like concat(@search, '%') desc gebruikt trouwens de booleaanse logica van MySQL. 1 =waar, 0 =onwaar, dus als u deze aflopende volgorde bestelt, krijgt u eerst waar.

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



  1. PHP PDO - Aantal rijen

  2. GROUP BY en geaggregeerde sequentiële numerieke waarden

  3. Selecteer mysql-query tussen datum?

  4. PHP-controle op NULL