当前位置: 首页 > 面试题库 >

MySQL-如何按相对顺序排序?INNODB表

骆利
2023-03-14
问题内容

我在名为“ 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

请注意,我们只拉过一次“约翰·史密斯”,我们接过他的最新条目。根据我的数据,所有名称均指同一个确切的人,而无需担心两个名为John
Smith的家伙。有想法吗?让我知道是否可以澄清任何事情。


问题答案:

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


 类似资料:
  • 我按直接顺序列出了列表1<代码>列表 如何更改顺序。我不知道如何重写扩展类中的方法,请用例子写或说清楚。

  • 问题内容: 当我使用IN从表中选择一组行时,例如 有一种SQL技巧可以按照IN集合中给定的顺序恢复它们吗? 因此,在示例中,假设x具有ID为23、55、44和12的行,则将按该顺序返回这四行。 问题答案:

  • 我有一个数据库表,我想对其进行筛选,然后按相反(降序)顺序进行排序。我如何在类似于以下内容的速度流中表达: 我希望我的SQL查询能够通过速度优化,因此我不能使用匿名lambda。

  • 问题内容: 我将要有一个固定的项目清单,直到有一个随机化步骤,我才能运行查询直到执行该查询为止。 我想要以下内容: 假设is_launch_set将返回1,3,7,11,但已被随机分配到以下位置: 关于如何实现这一目标的任何想法?我在想也许是一个find_in_set,但不是很确定。 问题答案: 您可以使用以下任一方法来做到这一点: 要么 要么

  • 问题内容: 好的,所以我试图在多列中进行全文搜索,就像这样简单: 现在,我想按相关性排序(找到了多少个单词?),我已经可以使用以下方式进行处理: 现在这是我迷路的部分,我想在此列中优先考虑相关性。 我想我可以创建两个相关性列,一个用于,一个用于,但是到那时我将在表中进行三遍相同的搜索,而对于我正在执行的此功能,性能非常重要,因为查询将被联接并与其他表匹配。 因此,我的主要问题是 ,是否有更快的方法

  • 问题内容: 我有一个包含国家/地区名称的对象。如何按字母顺序对列表进行排序? 问题答案: 假设这些是字符串,请使用方便的静态方法sort……