Selecione a última ordem 20 ascendendo – PHP / MySQL

Esta é a estrutura da minha tabela

MyTable ID[PK][auto increment] TopicID UID Comment 

Agora eu quero obter o último 20 comentário para um ID de assunto, mas ele deve ser ordenado por ordem crescente!

[Assim como o Facebook, por padrão, mostra apenas 20 comentários apenas]

Estou procurando por uma versão otimizada, posso fazer isso com 2/3 query e php sort array, mas procurando uma alternativa melhor

Sample Result with data

 MyTable ID TopicID UID Comment 1 1 10 AAAA 2 1 11 BBBB 3 1 10 CCCC 4 1 10 dddd 5 1 11 EEEE 6 1 10 FFFF 

Eu quero obter o último 3 resultado para um ID de Mídia, o resultado deve ser

 4 1 10 dddd 5 1 11 EEEE 6 1 10 FFFF 

e não

 6 1 10 FFFF 5 1 11 EEEE 4 1 10 dddd 

Primeiro, selecione as últimas 20 inputs. Em seguida, classifique-os em ordem crescente. Você pode facilmente fazer isso em uma única consulta (com subconsulta):

 select * from ( select * from your_table order by id desc limit 20 ) tmp order by tmp.id asc 
 SELECT * FROM ( SELECT * FROM mytable WHERE topicid = $mytopicid ORDER BY id DESC LIMIT 20 ) q ORDER BY id 

ou, mais eficientemente,

 ( SELECT * FROM mytable WHERE topicid = $mytopicid ORDER BY id DESC LIMIT 20 ) ORDER BY id 
  SELECT * FROM (SELECT * FROM MyTable ORDER BY ID DESC LIMIT 20) ilv ORDER BY ID; 

Esta deve ser a expressão mais curta para fazer o trabalho:

  (select * from your_table order by id desc limit 20) order by id; 

Eu realmente não entendo ??

O que há de errado com um simples SELECT * FROM MyTable WHERE TopicID = 1 ORDER BY ID ASC LIMIT 20 ?

Por sinal, se você estiver mostrando os mais recentes entrados (ou seja, o mais recente), você quer DESC (Descendente), e não ASC . Além disso, usar o ID é muito pouco confiável, você deve ter uma coluna DATETIME que armazena quando o comentário foi inserido.

EDIT: a resposta do binaryLV fará isso corretamente usando uma subconsulta. É a mesma consulta que a minha, DESC ‘d, e então recorreu por ID.

Você precisa adicionar uma coluna CommentDate e toda vez que você INSERT um comentário, use NOW() ou GETDATE() então use esta opção:

 SELECT Comment FROM MyTable WHERE TopicID=@ID ORDER BY CommentDate DESC, TopicID ASC LIMIT 20 

Supondo que o ID seja auto_increment, o que permitiria que você o usasse como um campo de pseudo-data,

 SELECT * FROM MyTable ORDER BY ID DESC LIMIT 20 

Você pode tentar isso

 SELECT * FROM( SELECT TOP 20 * FROM TableName ORDER BY Id DESC ) Naushad ORDER BY Naushad.Id