在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