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