2

我正在尝试显示用户列表,其中帐户列表位于activated=1下方,而activated=0帐户位于顶部。我尝试使用UNION,因为我需要所有非活动帐户,ORDER BY created DESC而激活帐户设置为ORDER BY email但由于某种原因我的所有ORDER BY命令都被忽略了。我在这里做错了什么?

(
    SELECT 
        email, 
        roles.full role, 
        created 
    FROM sol_users users
    JOIN sol_user_roles ur ON users.id = ur.user_id 
    JOIN sol_roles roles USING(role_id) 
    WHERE activated = 0
    ORDER BY created DESC
)
UNION
(
    SELECT
        email, 
        roles.full role, 
        created
    FROM sol_users users
    JOIN sol_user_roles ur ON users.id = ur.user_id 
    JOIN sol_roles roles USING(role_id) 
    WHERE activated = 1
    ORDER BY email
)

非活动用户需要放在最上面,以便管理员知道需要激活这些用户。

4

2 回答 2

2

您不需要工会 - 尝试:

SELECT email, roles.full role, created 
FROM sol_users users
JOIN sol_user_roles ur ON users.id = ur.user_id 
JOIN sol_roles roles USING(role_id) 
ORDER BY activated, case activated when 1 then email end, created DESC
于 2013-04-27T10:33:10.543 回答
0

您可以尝试IF在子句中使用语句ORDER BY。有关类似主题的讨论,请参阅此内容。

于 2013-04-27T10:37:25.017 回答