2013-12-10 93 views
2

我有这个疑问由多个字段排序?

SELECT * FROM 
(SELECT u.id,u.email,u.verified,u.verified_on,u.created_on,ca.html AS age,cg.html AS gender,cs.html AS state 
FROM users u 
LEFT JOIN combo ca ON ca.combo_group='age' AND ca.value =u.age 
LEFT JOIN combo cg ON cg.combo_group='gender' AND cg.value =u.gender 
LEFT JOIN combo cs ON cs.combo_group='state' AND cs.value =u.state ORDER BY created_on DESC) users ORDER BY email ASC; 

我使用子查询,因为我想排序created_on DESC和电子邮件ASC

没有如果我使用子查询这个影响性能。

+0

不仅仅是对性能的影响:它不会产生预期的结果,无论是。 –

+0

为什么会给人意想不到的? –

+1

因为它最终会通过电子邮件排序,所以完全忽略了created_on的顺序。 –

回答

5

为什么不按两个字段排序?

SELECT 
    u.id 
    ,u.email 
    ,u.verified 
    ,u.verified_on 
    ,u.created_on 
    ,ca.html AS age 
    ,cg.html AS gender 
    ,cs.html AS state 
FROM users u 
    LEFT JOIN combo ca ON ca.combo_group='age' AND ca.value =u.age 
    LEFT JOIN combo cg ON cg.combo_group='gender' AND cg.value =u.gender 
    LEFT JOIN combo cs ON cs.combo_group='state' AND cs.value =u.state 
ORDER BY created_on DESC, email ASC 
+0

哦,这是可能的吗?我不知道 –

+0

是的,你可以通过几个字段 – Sal00m

+0

...和表达式,并通常由子查询的结果。 –