Как использовать ORDER BY FIELD с подзапросом в MySQL? - PullRequest
2 голосов
/ 06 ноября 2010

Предположим, есть две таблицы. Первая таблица, user_actions, имеет два поля: user_id и action. Вторая таблица 'users' также имеет два поля: 'id' и 'name'. Я хочу отсортировать первую таблицу так, чтобы действия, совершенные пользователями Аароном или Брюсом, выполнялись первыми, а действия, совершенные Юрием и Зорро, - последними. Как бы я это сделал?

Я пробовал это:

select * from `user_actions` order by field(`user_id`,(select distinct `id` from `users` order by `name`))

Не работает.

Ответы [ 5 ]

3 голосов
/ 06 ноября 2010

Почему подзапрос, а не объединение?

Примерно так:

select ua.*
from user_actions ua inner join users u on ua.user_id = u.id
order by u.name
3 голосов
/ 06 ноября 2010
select ua.user_id, ua.action, u.name from user_actions ua
inner join users u on u.user_id = ua.user_id
order by u.name
0 голосов
/ 06 ноября 2010

Вы можете попробовать:

SELECT u1.user_id, u1.action, u2.name FROM user_actions u1, users u2
WHERE u1.user_id=u2.id 
ORDER BY u2.name 
0 голосов
/ 06 ноября 2010

Полагаю, этого запроса будет достаточно

SELECT * FROM user_actions ORDER BY name

Порядок по ключевому слову по умолчанию сортирует по возрастанию, поэтому не нужно ASC после поля 'name'.Если вы хотите обратный путь, просто добавьте DESC после 'name'

0 голосов
/ 06 ноября 2010

Как насчет

select user_id,action from user_actions join users 
  on user_actions.user_id = users.id 
  order by name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...