mysql - MySQL 中的优先级条件

标签 mysql where-clause

我喜欢在 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/

相关文章:

MySQL——分层选择

php - sql只更新一行

php - 保存检索到的数据

python - np.where 用字符串创建缺失值

Ruby 在 WHERE 子句中使用具有多个选项的查询

php - MySQL:忽略行之间差异大于 x 的结果

mysql - 在 Node 中从文件与数据库中提供内容

基于时间戳最大值的SQL内连接

mysql - 组 concat 和 in 子句

php - 如何在 SQL SELECT 查询的 WHERE 子句中使用变量