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

MySQL-IN()中的ORDER BY值

宫子晋
2023-03-14
问题内容

我希望按照 在IN()函数中输入的顺序 对以下查询中返回的项目进行排序。

输入:

SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');

输出:

|   id   |   name  |
^--------^---------^
|   5    |   B     |
|   6    |   B     |
|   1    |   D     |
|   15   |   E     |
|   17   |   E     |
|   9    |   C     |
|   18   |   C     |

有任何想法吗?


问题答案:
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')

该场函数返回字符串的剩余列表中的第一个字符串的位置。

但是,在性能上要好得多,先有一个索引列代表您的排序顺序,然后再按此列进行排序。



 类似资料:
  • MySQL 中的 IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。 NOT IN 的作用和 IN 恰好相反,NOT IN 用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为 1,否则返回值为 0。 IN 和 NOT IN 的语法格式如下: expr IN ( value1, value2, value3 ... valueN ) expr N

  • 问题内容: 我分两个步骤运行MYSQL查询。首先,通过一个查询获取ID列表,然后使用第二个查询沿的方式检索这些ID的数据。我知道这听起来很骇人听闻,但是由于查询非常复杂,我已经这样做了。第一个涉及许多几何和触发法,第二个涉及许多不同的联接。我确定它们可以在单个查询中编写,但是我的MYSQL不足以实现它。 这种方法有效,但是 感觉 不对。再加上我担心它不会扩展。目前,我正在10,000个记录的数据库

  • 问题内容: 我有一个数据库,其中有四列对应于开始和结束位置的地理坐标x,y。这些列是: 00 00 x1 11 我有这四个列的索引,其顺序为x0,y0,x1,y1。 我列出了大约一百种地理对组合。我将如何有效地查询此数据? 我想按照此SO答案的建议执行类似的操作,但它仅适用于Oracle数据库,不适用于MySQL: 我以为可能对索引做些什么?最好的方法是什么(即:最快的查询)?谢谢你的帮助! 笔记

  • 1)使用的第一个查询...大约用了23秒 目前我修改了查询..这需要大约9秒 我不确定要做的表演是什么?我希望这个查询是快速的..我尝试索引rid和id,但这仍然使查询变得更糟。 下面是表格的详细信息 mza_movie_upload MZA_Movie_Statics

  • 问题内容: 我有三个表来定义用户: 我想创建一个对应用程序中的其他用户具有一定访问权限的中间层用户。为了确定已登录的用户可以访问哪些用户,我使用了如下子查询: 当前,我将子查询字符串存储在变量中,然后每次需要拉出用户列表时,将其动态插入到外部查询中。完成此操作后,我想到“最好只存储实际s 的字符串”。 因此,与其将其存储在变量中… …我实际上是执行查询并以这种方式存储结果… 然后,当我需要拉一小部

  • 问题内容: 我的一个表中有一列,其中存储多个用逗号分隔的ID。有没有一种方法可以在查询的“ IN”子句中使用此列的值。 column()的值类似于 我需要用作 我对Crozin的回​​答感到满意,但我愿意接受建议,观点和选择。 随时分享您的观点。 问题答案: 以@Jeremy Smith的FIND_IN_SET()示例为基础,您可以使用联接来完成此操作,因此不必运行子查询。 这是众所周知的非常表现