34

我在一个名为“cards”的 INNODB 表中有大约 20,000 行,所以 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

因此,假设用户搜索“John”,我希望结果集的顺序为:

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

请注意,我们只提取了“约翰史密斯”一次,我们提取了他最近的条目。由于我的数据,所有的名字都是同一个人的,不用担心两个叫约翰史密斯的不同的人。想法?让我知道我是否可以澄清任何事情。

4

1 回答 1

112

版本 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
于 2009-10-19T13:55:52.693 回答