MySQL отрицательный предел? - PullRequest
1 голос
/ 08 января 2010

Я делаю простой веб-чат, поэтому мне нужно получить (например) 30 последних сообщений из базы данных MySQL. Это не создает никаких проблем, но как я могу взять данные в обратном порядке? Я имею в виду, самое старое сообщение является первым. Я должен взять последние 30 записей по добавленному времени.

РЕДАКТИРОВАТЬ: Спасибо за ответы, но ...

ЗАКАЗАТЬ ПО добавленному DESC LIMIT 30

дает:

15, 14, 13, 12, 11

... а мне нужно:

11, 12, 13, 14, 15

Я знаю, что могу получить его, используя подзапрос. Есть ли лучший метод?

Ответы [ 3 ]

5 голосов
/ 08 января 2010

Я не вижу способа сделать это без подзапроса, но это не должно быть проблемой. Внешний ORDER BY сортирует только 30 строк, поэтому потеря производительности будет незначительной.

SELECT * FROM
(
  SELECT *
  FROM posts
  ORDER BY post_time DESC
  LIMIT 0, 30
) x
ORDER BY post_time ASC

Конечно, вы должны использовать настоящие имена столбцов вместо *.

4 голосов
/ 08 января 2010

Как упоминалось выше, простая сортировка "desc" получает самые старые 30 сообщений, а не самые новые (хотя они в правильном порядке).

На самом деле все, что вам нужно:

(выберите столбец в порядке таблицы добавленным пределом 30 деск), добавив asc

Надеюсь, это поможет.

0 голосов
/ 08 января 2010

Предполагается, что у вас есть столбец с именем MessageTimestamp, в котором хранится отметка времени каждого сообщения:

SELECT [...] FROM MyChatTable ORDER BY MessageTimestamp DESC LIMIT 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...