我喜欢在 MySQL 上按优先级选择一行。我不知道是否可行,但请看下面的示例:
id name
1 John
2 Doe
3 Mary
4 Jhonny
假设我不知道 ID,但由于特定原因,我需要按优先级选择:3、2、1... 在这种情况下,将选择 MARY (#3)。但如果我需要按顺序 5、2、1 选择,则将选择 DOE (#2)。
好的,我可以使用 IN(5, 2, 1) 来完成。问题是,如果我没有任何结果(如 IN(5, 6, 7)),我至少需要一行(无关紧要)。
例如:选择 5、6、7...没有找到...然后,选择第一个找到的(例如 JOHN)。
这可能吗?
再见!
编辑:我只是想到了这个解决方案,但我不知道它应该多快,但效果很好。接受对任何人都没有损失的更好基准的回应。
ORDER BY FIND_IN_SET(`id`, '5,6,7') DESC
最佳答案
SELECT *
FROM your_table
ORDER BY
(CASE id
WHEN 5 THEN 1
WHEN 6 THEN 2
WHEN 7 THEN 3
ELSE id+10
END)
LIMIT $some_limit;
技巧是利用 order by
所以,匹配id为5的优先级为1,
匹配id为6的优先级为2,
匹配id为7的优先级为3,
否则,least id 将返回
假设您使用 unsigned 作为 id
关于mysql - MySQL 中的优先级条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310216/