MySQL упорядочить по подзапросу

0

У меня есть таблица "Автор", содержащая авторов (Nicknames & IDs).

В таблице Content каждый элемент имеет поле "Автор", содержащее идентификатор автора, который его создал.

Я хочу выбрать всех авторов, используя запрос SELECT, и заказать им количество Содержимого, которое они создали.

Это то, что я пробовал до сих пор:

SELECT id,Nickname FROM Authors 
WHERE 1 ORDER BY (SELECT COUNT(*) FROM Content WHERE Author=id) ASC

Он работает, но выход недействителен - у него нет определенного порядка...

Любая помощь приветствуется.

Теги:
select
count
subquery

2 ответа

1
Лучший ответ

Это должно делать то, что вы хотите:

SELECT a.id, a.Nickname
FROM Authors a
WHERE 1
ORDER BY (SELECT COUNT(*) FROM Content c WHERE c.Author = a.id) ASC;

Это делает корреляцию явной. Ваша версия будет выдавать несортированные результаты, если у Content есть столбец id что вполне вероятно.

Чаще всего, вы хотели бы подсчет в SELECT, и вы бы сделали:

SELECT a.id, a.Nickname, COUNT(c.Author) as num_content
FROM Authors a LEFT JOIN
     Content c
     ON c.Author = a.id
GROUP BY a.id, a.Nickname
ORDER BY num_content ASC;
  • 0
    Я попробовал, и ваш ответ (1-й запрос) работает как шарм. Кроме того, это очень логично и хорошо объяснено. Большое спасибо !
2

Вы можете использовать:

SELECT a.id,a.Nickname
FROM Authors  a
LEFT JOIN Content c
  ON c.Author=a.id
GROUP BY a.id,a.Nickname
ORDER BY COUNT(*) DESC

Ещё вопросы

Сообщество Overcoder
Наверх
Меню