MySQL默认排序顺序与特定选择

时间:2018-10-04 09:50:55

标签: mysql

关于MySQL如何对结果进行排序,我得到了很多答案,但似乎没有一个能解决我的特定问题。希望我不会在stackoverflow上的其他地方错过答案。

我有一个如下所示的SQL查询:

SELECT id, something FROM sometable WHERE 
id=1 OR id=2 OR id=5 OR 
id=6 OR id=100 OR id=1000 
OR id=4

现在,我需要它以已选择的特定顺序返回结果。结果应按以下特定顺序显示:

1
2
5
6
100
1000
4

MYSQL将以我选择它们的特定顺序显示返回的记录吗?我无法使用ORDER BY,因为我需要它们与我在第一个实例中选择它们的确切方式。一个简单的测试确认它是以这种方式返回的,但是从其他地方阅读后,我得到了一个想法,当不使用ORDER BY时,您不能相信以特定顺序返回结果的方式。

1 个答案:

答案 0 :(得分:1)

您可以使用FIELD()功能。在应用程序代码中,您将在其中动态创建此SQL,可以像在FIELD()子句中一样,为WHERE构建SQL字符串。

FIELD(str,str1,str2,str3,...)
  

返回str1,str2,str3,...列表中str的索引(位置)。   如果找不到str,则返回0。

现在,如果FIELD(id, 1,2,5,6,100,1000,4)不在id中,则(1,2,5,6,100,1000,4)函数将返回 0

因此,如果仅使用ORDER BY FIELD(id, 1,2,5,6,100,1000,4),则其他不匹配行将显示在顶部。因此,我们可以使用If()函数为其他不匹配行返回 1 ,为匹配的行返回 0

现在,我们可以使用FIELD(id, 1,2,5,6,100,1000,4)的另一种排序方式。这样可以确保匹配的ID按照Field()函数中指定的顺序首先出现。

SELECT id, something FROM sometable WHERE 
id=1 AND id=2 AND  id=5 AND  
id=6 AND  id=100 AND id=1000 
AND id=4 
ORDER BY IF(FIELD(id, 1,2,5,6,100,1000,4) = 0, 1, 0) ASC, 
         FIELD(id, 1,2,5,6,100,1000,4) ASC