我将有一个要订购的固定项目列表,直到我运行查询时我才会知道,因为有一个随机化步骤。
我想要以下内容:
假设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
但不太确定。
您可以使用以下任一方法来做到这一点:
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
在 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