2013-04-27 3 views
2

Я пытаюсь показать список пользователей, список ниже которых составляет activated=1, а activated=0 учетные записи находятся на верхнем. Я пробовал использовать UNION, так как мне нужны все неактивные учетные записи как ORDER BY created DESC, а активированные учетные записи - ORDER BY email, но по какой-то причине все мои команды ORDER BY игнорируются. Что я здесь делаю неправильно?MySQL Использование ORDER BY при использовании 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 = 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 
) 

Неактивные пользователи должны быть размещены сверху, чтобы администратор знал, что они должны быть активированы.

ответ

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 
+0

Woah. Я никогда не знал, что вы можете использовать условные обозначения для 'ORDER BY'. Такой красивый код! – enchance

+0

Рад, что вам нравится. :) –

0

Вы можете попробовать использовать IF заявление, в вашей статье ORDER BY. См. this для обсуждения подобной темы.

Смежные вопросы