MySQL 在使用 UNION 的同时使用 ORDER BY

标签 mysql sql-order-by

我试图显示用户列表,其中 activated=1 帐户列表位于下方,而 activated=0 帐户列表位于顶部。我尝试使用 UNION 因为我需要所有非事件帐户作为 ORDER BY 创建的 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
)

需要将非事件用户放在顶部,以便管理员知道需要激活这些用户。

最佳答案

你不需要工会 - 尝试一下:

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

关于MySQL 在使用 UNION 的同时使用 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16250977/

相关文章:

java - 将Mysql的数据类型导入到Java程序中

mysql - 当列必须满足多个值时如何选择行?

mysql - 根据日期和不同字段从数据库表中选择行

zend-framework - Zend framework SQL select查询构造(ORDER BY)

mysql - 在使用 JOIN 进行 GROUP BY 之前进行 ORDER BY

mysql - SQL - 按 2 列排序 - 排序主题(先固定,然后按创建的时间戳)

mysql - Node.js 作为带有 MySQL 的网络服务器

mysql - 使用 MySQL 获取行的 JSON 数组

linq - OrderBy IndexOf 底部带有负数的字符串

mysql - 如何控制MySQL排序中的nulls-first或nulls-last?