2015-06-03 93 views
0

我有这个疑问:SQL ORDER BY多个领域

SELECT 
    id, name 
FROM 
    data 
ORDER BY 
    FIELD(id, 4, 5, 8, 10) DESC, 
    name 

IDS 4, 5, 8, 10是往上顶。到现在为止还挺好。但后来我想按name排序。这不起作用。也许FIELD已经确定了特定的顺序?我可以更改SQL吗,所以我仍然可以告诉SQL什么样的ID应该在顶部(真/假关系),但按名称进行最终排序?某种枚举?

FIELD(id, 4, 5, 8, 10)中的ID来自另一个来源。它们表示在外部源中是否有数据要给予id。

+2

你使用哪个DB? –

+0

如果你改变命令,比如'ORDER BY name,FIELD(id,4,5,8,10)' – Rahul

+0

我使用MySQL 5.5 – sod

回答

5

你可以使用ANSI 92 Compatible CASE WHEN这样。

SELECT 
    id, name 
FROM 
    data 
ORDER BY 
    CASE WHEN id IN (4, 5, 8, 10) THEN 0 ELSE 1 END ASC, 
    name 
+0

Works!非常感谢。 – sod

+0

没问题,在你的问题中总是提到你的RDBMS。你会得到更快,更准确的答案 – ughai

+0

备注:FIELD做了一些不同的事情,但是在OP的情况下_this_就是他试图完成的事情 –