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

MySQL - Sådan får du søgeresultater med nøjagtig relevans

Du kan bruge strengfunktioner, såsom:

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;

Dette giver dig alle poster, der indeholder @search. Først dem, der har det i begyndelsen, så dem, der har det efter et blanktegn, derefter efter forekomstens position, derefter alfabetisk.

name like concat(@search, '%') desc bruger i øvrigt MySQL's booleske logik. 1 =sand, 0 =falsk, så du får sand først, hvis du bestiller dette faldende.

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



  1. Sortering af MySQL-forespørgsel efter breddegrad/længdegrad

  2. mysql:Hvordan kan jeg fjerne tegn ved starten eller slutningen af ​​feltet

  3. fejl, streng eller binære data vil blive afkortet, når du forsøger at indsætte

  4. Tæl antal dage mellem 2 datoer i JPA