MySQL中的优先级条件

Dav*_*ues 1 mysql where

我喜欢在MySQL上优先选择一行.我不知道是否可能,但请看下面的例子:

id name
1  John
2  Doe
3  Mary
4  Jhonny
Run Code Online (Sandbox Code Playgroud)

假设我不知道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
Run Code Online (Sandbox Code Playgroud)

ajr*_*eal 6

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;
Run Code Online (Sandbox Code Playgroud)

诀窍就是利用 order by

因此,匹配id为5将赋予优先级1,
匹配id为6将赋予优先级2,
匹配id为7将赋予优先级3,
否则,最小id将返回

假设你使用unsigned作为id