Подтвердить что ты не робот

Выберите последний 20-й порядок по возрастанию - PHP/MySQL

Это моя структура таблицы

MyTable
ID[P.K][auto increment]   TopicID   UID   Comment

Теперь я хочу получить последние 20 комментариев для TopicID, но он должен быть отсортирован в порядке возрастания!

[Так же, как Facebook по умолчанию показывает только 20 комментариев]

Я ищу оптимизированную версию, я могу сделать это с помощью 2/3 запроса и массива сортировки php, но ищет лучшую альтернативу

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

Я хочу получить последние 3 результата для TopicID, результат должен быть

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

а не

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

Ответ 1

Сначала выберите последние 20 записей. Затем отсортируйте их по возрастанию. Вы можете легко сделать это в одном запросе (с подзапросом):

select * from (
    select * from your_table order by id desc limit 20
) tmp order by tmp.id asc

Ответ 2

SELECT  *
FROM    (
        SELECT  *
        FROM    mytable
        WHERE   topicid = $mytopicid
        ORDER BY
                id DESC
        LIMIT 20
        ) q
ORDER BY
        id

или, более эффективно,

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

Ответ 3

 SELECT * FROM
   (SELECT * FROM MyTable
   ORDER BY ID DESC
   LIMIT 20) ilv
 ORDER BY ID;

Ответ 4

Я действительно не понимаю??

Что не так с простым SELECT * FROM MyTable WHERE TopicID = 1 ORDER BY ID ASC LIMIT 20?

Кстати, если вы показываете последние введенные (т.е. самые последние), вам понадобится DESC (Descending), а не ASC. Кроме того, использование идентификатора очень ненадежно, вы должны иметь столбец DATETIME, который хранится при вводе комментария.

EDIT: ответ binaryLV будет делать это правильно, используя подзапрос. Это тот же запрос, что и мой, DESC 'd, а затем прибегает к ID.

Ответ 5

Вам нужно добавить столбец CommentDate, и каждый раз, когда вы вставляете комментарий, используйте NOW() или GETDATE(), затем используйте этот выбор:

SELECT Comment FROM MyTable WHERE [email protected] ORDER BY CommentDate DESC, TopicID ASC LIMIT 20

Ответ 6

Это должно быть кратчайшее выражение для выполнения задания:

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

Ответ 7

Предполагая, что идентификатор является auto_increment, что позволит вам использовать его в качестве псевдоданного поля,

SELECT * FROM MyTable
  ORDER BY ID DESC
  LIMIT 20

Ответ 8

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

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