MySQL的 - 如何排序方式按何种? InnoDB表(MySQL - How to ORDER

2019-08-20 10:17发布

我有在叫“卡”一个InnoDB表约20000行,因此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

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

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

请注意,我们只拉“约翰·史密斯”一次,我们带着他的最新的条目。 由于我的数据,所有的名字都是完全一样的人,没有必要担心2名为John Smith不同的球员。 想法? 让我知道如果我能澄清什么。

Answer 1:

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


文章来源: MySQL - How to ORDER BY RELEVANCE? INNODB Table