MySQL中的优先级条件

时间:2011-09-05 15:45:30

标签: mysql where

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

3 个答案:

答案 0 :(得分: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;

诀窍是在order by

上使用

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

假设您使用无符号作为ID

答案 1 :(得分:0)

首先你需要将ID列重新映射到命令列,让我们在特殊联合的帮助下完成(第一列是你的id,第二列是命令指令):

 SELECT 5 as ID, 1 as ord
 UNION ALL SELECT 2 , 2
 UNION ALL SELECT 1 , 3

清楚吗? 如果是这样 - 让我们做完全的例子:

SELECT m.* from MyTable m
    LEFT OUTER JOIN (
       SELECT 5 as ID, 1 as ord
       UNION ALL SELECT 2 , 2
       UNION ALL SELECT 1 , 3
    ) o ON m.ID = o.ID
ORDER BY  COALESCE(o.ord, 100)

答案 2 :(得分:0)

SELECT U.username,id 来自tbluser U. ORDER BY FIND_IN_SET(username,'Tester')DESC,用户名ACS

这个优先级(首先给出)“Tester”,然后对它进行排序A-Z