MySQL – Come ordinare PER RILEVANZA? Tavola INNODB

Ho circa 20.000 file in una tabella INNODB chiamata “carte”, quindi FULLTEXT non è un’opzione.

Si prega di considerare questa tabella:

id | name | description ---------------------------------------------------------- 1 John Smith Just some dude 2 Ted Johnson Another dude 3 Johnathan Todd This guy too 4 Susan Smith Her too 5 Sam John Bond And him 6 John Smith Same guy as num 1, another record 7 John Adams Last guy, promise 

Quindi, supponiamo che l’utente cerchi “John”, voglio che il set di risultati sia nell’ordine di:

 7 John Adams 6 John Smith 3 Johnathan Todd 5 Sam John Bond 2 Ted Johnson 

Tieni presente che abbiamo selezionato “John Smith” solo una volta, abbiamo preso la sua voce più recente. A causa dei miei dati, tutti i nomi sono per la stessa persona esatta, non c’è bisogno di preoccuparsi di 2 diversi tipi di nome John Smith. Idee? Fammi sapere se posso chiarire qualsiasi cosa.

versione 1:

 SELECT max(id) id, name FROM cards WHERE name like '%John%' GROUP BY name ORDER BY CASE WHEN name like 'John %' THEN 0 WHEN name like 'John%' THEN 1 WHEN name like '% John%' THEN 2 ELSE 3 END, name 

versione 2:

 SELECT max(id) id, name FROM cards WHERE name like '%John%' GROUP BY name ORDER BY CASE WHEN name like 'John%' THEN 0 WHEN name like '% %John% %' THEN 1 WHEN name like '%John' THEN 2 ELSE 3 END, name