MySQL упорядочить по подзапросу - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть таблица «Автор», содержащая авторов (псевдонимы и идентификаторы).

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

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

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

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

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

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

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

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
0 голосов
/ 15 сентября 2018

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

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;
...