mysql命令由固定列表组成

时间:2012-06-07 21:52:45

标签: mysql sql

我将有一个固定的项目列表,我将不知道,直到我运行查询,因为有一个随机化步骤。

我希望得到以下内容:

假设is_launch_set将返回1,3,7,11,但已被随机化为:

select * from items where is_launch_set=1 order by id values (3,11,7,1);

关于如何实现这一目标的任何想法?我想的可能是find_in_set但不太确定。

2 个答案:

答案 0 :(得分:69)

您可以使用以下任一方式执行此操作:

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

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

ORDER BY CASE id WHEN 3 THEN 0
                WHEN 11 THEN 1
                 WHEN 7 THEN 2
                 WHEN 1 THEN 3
                        ELSE 4
         END

答案 1 :(得分:0)

在我的 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