Как выбрать ТОП 5, а затем следующие 5? - PullRequest
3 голосов
/ 20 марта 2010

, поскольку комментарии всегда есть, вы можете выбрать, чтобы показать 5 лучших комментариев (что я знаю, как), и если их больше 5, вы можете нажать на ссылку, и она покажет следующие 5 комментариев. Проблема в том, что я не знаю, каким должен быть код, чтобы он показывал следующие 5.

Лучшее представление о том, что я говорю Допустим, у меня есть 10 комментариев, я использую

ВЫБРАТЬ * ИЗ новостей ЗАКАЗАТЬ ПО ID DESC LIMIT 5

, который покажет ТОП 5 комментариев, скажем, комментарии с ID 10,9,8,7,6

но что, если я хочу комментарии с ID 5,4,3,2,1?

Ответы [ 5 ]

4 голосов
/ 20 марта 2010
SELECT * FROM news ORDER BY ID DESC LIMIT 5, 5

Предполагая, что вы используете MySQL, LIMIT поддерживает два параметра: offset (необязательно) и row_count:

[LIMIT {[offset,] row_count | row_count OFFSET смещение}]

Альтернативный способ использования OFFSET - совместимость с PostgreSQL.

2 голосов
/ 20 марта 2010

Я предполагаю, что вы говорите о MySQL, поэтому ваш ответ:

SELECT * FROM news ORDER BY ID DESC LIMIT 5 OFFSET 5
1 голос
/ 20 марта 2010

Это клиентская вещь.

Показать 5, скрыть остальные до щелчка. Нравится этот сайт: не перезванивать, чтобы получить оставшиеся скрытые комментарии.

1 голос
/ 20 марта 2010

Один из способов сделать это безвкусным:

SELECT TOP 5 *
  FROM table
 WHERE pk NOT IN (SELECT TOP (page * 5) pk
                    FROM table
                   ORDER BY pk)
 ORDER BY pk
0 голосов
/ 20 марта 2010

Если вы хотите показать первые пять комментариев со всем текстом (взятым из вашего комментария Йоша), а затем еще пять комментариев, но с сокращенным текстом или только заголовками, вам не следует использовать два запроса SQL, а лучше это в логике вашего приложения.

Итак, выберите все ваши записи новостей:

SELECT id, title, body, date FROM news ORDER BY id DESC LIMIT 10

А затем зациклите свой результат. Покажите первые пять, отличные от следующих пяти.

Если вы хотите иметь что-то, похожее на Paginator, вы можете начать с, скажем, страницы 0:

$page = isset($_GET['page'] ? intval($_GET['page']) : 0;
SELECT id, title, body, date FROM news ORDER BY id DESC LIMIT 5 OFFSET $page * 5 + 5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...