MySQL的 – 如何按照相关性? INNODB表

我在INNODB表中有大约20000行叫做'cards',所以FULLTEXT不是一个选项。

请考虑这个表格:

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 

所以说,用户search“约翰”,我想结果集的顺序是:

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

请注意,我们只拉了一次“约翰·史密斯”,我们拿了他最近一次的参赛作品。 由于我的数据,所有的名字都是同一个人,不需要担心约翰·史密斯这两个不同的人。 想法? 让我知道,如果我能澄清任何事情。

版本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 

版本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