Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中按固定列表排序项目?_Mysql_Sql - Fatal编程技术网

在MySQL中按固定列表排序项目?

在MySQL中按固定列表排序项目?,mysql,sql,Mysql,Sql,我将有一个固定的要排序的项目列表,因为有一个随机化步骤,所以在运行查询之前我不会知道 我想要以下的东西: 假设是启动集将返回1、3、7、11,但已随机分配到以下位置: SELECT * FROM items WHERE is_launch_set=1 ORDER BY id values (3,11,7,1); 关于如何实现这一点有什么想法吗?我在想可能是在集合中查找,但不是很确定。您可以使用以下任一方法来完成此操作: ORDER BY FIND_IN_SET(id, '3,11,7,1')

我将有一个固定的要排序的项目列表,因为有一个随机化步骤,所以在运行查询之前我不会知道

我想要以下的东西:

假设
是启动集
将返回1、3、7、11,但已随机分配到以下位置:

SELECT * FROM items WHERE is_launch_set=1 ORDER BY id values (3,11,7,1);

关于如何实现这一点有什么想法吗?我在想可能是
在集合中查找
,但不是很确定。

您可以使用以下任一方法来完成此操作:

ORDER BY FIND_IN_SET(id, '3,11,7,1')


在mys sql 8.0中,它仅按第一列排序-在本例中为3:

ORDER BY FIND_IN_SET(id, '3,11,7,1')
在这个例子中,它起了作用,但有好处。最后你会看到3个,然后是11个,然后是7个等等

ORDER BY FIELD(id, 3, 11, 7, 1)
如果你选择这个例子,你会先看到1,然后是7,然后是11等等

ORDER BY FIELD(id, 3, 11, 7, 1) DESC

在我问问题之前,我以为答案是这样的,但每次的顺序似乎都不一样。是否有任何配置设置或其他内容。现场答案看起来不错。@timpone:我相信它是有效的。您可以将
FIND_IN_SET(id,'3,11,7,1')
放在
SELECT
中,以确保它返回预期的结果。您是否知道这些方法中哪一种执行最快?除了在
id
字段中添加索引外,还有什么方法可以加速它吗?@Patrick M:你可以先试试。性能优化需要个人检查必须使用250k记录集中的10k记录测试前两种方法中的每一种。在_集中查找_大约需要4.5秒,字段为500ms。可能重复:,尽管这一次得到了更全面的答案。
ORDER BY FIELD(id, 3, 11, 7, 1)
ORDER BY FIELD(id, 3, 11, 7, 1) DESC