我正在为搜索功能构建一个 MySQL 查询,现在我想使用 ID 数组以某种方式对结果进行排序。
我已经能够通过使用与此类似的一段 MySQL 来做到这一点:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
但我想知道是否可以Order by FIELD
或 FIND_IN_SET
而无需在 Select 查询中设置 IN()
。
我不想使用 IN() 语句,因为我还希望得到不在 ID 数组中的结果
希望有人能把我推向正确的方向,
最佳答案
如果您只喜欢一次评估,您可以在 field()
中反转顺序并使用
SELECT id, name
FROM mytable
ORDER BY FIELD(id, 1, 123, 3, 77) desc
它仍将比您的原始查询花费更多的时间,因为 field()
比 IN
更昂贵,您现在必须评估 field( )
用于每一行,而不仅仅是一些行。
另一种可能是使用
SELECT id, name, FIELD(id, 77, 3, 123, 1) as orderno
FROM mytable
WHERE id IN (77, 3, 123, 1)
union
SELECT id, name, 99999999
FROM mytable
WHERE id NOT IN (77, 3, 123, 1)
order by orderno, id
这可能会更快,具体取决于数组的大小,但您必须对其进行测试,它也可能更糟。
关于mysql - 按字段排序或不带 IN() 的 Find_in_set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680030/