sql >> Databáze >  >> RDS >> Mysql

MySQL - Jak získat výsledky vyhledávání s přesnou relevanci

Můžete použít řetězcové funkce, jako například:

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;

Tím získáte všechny položky obsahující @search. Nejprve ty, které to mají na začátku, pak ty, které to mají za mezerou, pak podle pozice výskytu, pak podle abecedy.

name like concat(@search, '%') desc mimochodem používá booleovskou logiku MySQL. 1 =pravda, 0 =nepravda, takže seřazením tohoto sestupného pořadí získáte jako první hodnotu true.

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



  1. Získání procenta z MySql se skupinou podle podmínky a přesnosti

  2. QSqlDatabase open vždy po aktualizaci vrátí hodnotu true

  3. Zobrazení ALL_PROCEDURES nezobrazuje PROCEDURE_NAME

  4. Jaký je rozdíl mezi typy řetězců VARCHAR(255) a TINYTEXT v MySQL?