多个ORDER BY的问题必须遵守第一个子句

时间:2011-04-08 22:10:30

标签: mysql doctrine

我有一个查询来根据total_score字段获取前50个条目。从这些前50名,我需要能够通过他们的任何其他领域订购它们。我尝试使用多个ORDER BY语句,但结果集永远不会改变。这是我的疑问:

SELECT 
    e.id, e.name , e.total_score 
FROM 
    entry e 
ORDER BY 
    e.total_score DESC, e.name ASC

我想我理解为什么这不能满足我的需要,所以我想我的问题是如何实现我的目标?最后,我总是需要具有最高total_score的50个条目,但是此选择应该可以由任何其他字段订购。

如果在MySQL中无法做到这一点,我可以用PHP来做,但我宁愿让DB处理这个。

注意:我在MySQL 5 DB之上使用Doctrine 1.2。

谢谢!

2 个答案:

答案 0 :(得分:3)

ORDER BY,当与多列一起使用时,仅在以前的列中使用后续列​​。

尝试使用嵌套查询

   SELECT * FROM(
    SELECT TOP 50
        e.id, e.name , e.total_score, e.(YOURFIELD)
    FROM 
        entry e 
    ORDER BY 
        e.total_score DESC ) x ORDER BY x.(YOURFIELD)

答案 1 :(得分:3)

你需要一个子查询

select * from (
                 select ..... order by .... limit 50
               ) as t
order by something_else