2011-08-31 66 views
1

说我有如下表:喜欢和平等的SQL顺序?

ID  Author 
--------------------- 
1  Bill 
2  Joe 
3  Bill and Joe 
4  Bill 

而且我要的结果集将来自:

SELECT id FROM table WHERE Author LIKE '%Bill%' OR Author = 'Bill' 

我怎么会为了它,使平等匹配的行是第一行返回和类似的比赛来之后?例如该查询将返回1,4,3。我正在使用MySQL,但会在任何数据库中得到答案。

+2

你应该考虑正常化表。 –

回答

8
SELECT id 
FROM YourTable 
WHERE Author LIKE '%Bill%' 
ORDER BY CASE WHEN Author = 'Bill' THEN 0 
       ELSE 1 
     END 

你可能只需要做ORDER BY Author != 'Bill'以及 - 不知道有关MySQL的布尔表达式订购。

+1

+1我经常使用if但case语句更加标准。 –

+0

@nick - 任何关于我的想法'ORDER BY Author'='Bill''会被视为'0'和'1',因为我认为可能会发生? –

2
SELECT id 
FROM table 
WHERE Author LIKE '%Bill%' 
order by if(author='Bill',1,2) 
+0

第二个“OR”是多余的 –

+0

你是对的马丁。我只是在考虑排序。编辑后。 –

-1

我已经测试在DB和ORDER数据BY的作品,你想,没有任何问题,但你可以用下面的查询:

新建查询:

select Author, CONCAT(Author, ' ') as text_n 
from table where Author like '%Bill%' order by text_n; 

您编辑查询:

SELECT id FROM table WHERE Author LIKE '%Bill%' order by Author; 
0

如果该测试需要扩展到多个变量,我已经扩展了一些Martin的ans WER以下方式(例如3个标准):

SELECT id 
FROM YourTable 
WHERE Author LIKE '%Bill%' 
ORDER BY 
(CASE WHEN criteria_1='target_1' THEN 1 ELSE 2 END) 
* 
(CASE WHEN criteria_2='target_2' THEN 1 ELSE 2 END) 
* 
(CASE WHEN criteria_3='target_3' THEN 1 ELSE 2 END) 

最好的问候(和许多感谢Martin),