Paging как узнать номер страницы

[Gisma]

Новичок
Paging как узнать номер страницы

Есть таблица, допустим, news в ней следующие колонки id,name,content,order
Скрипт по-странично выводит новости.
Задача:
- получить по индексу новости страницу на которой она будет отображена, т.е. получить номер этой страницы.
Конечно процедурой в 15 комманд я решу проблему, но я думаю это решаемая проблема на уровне одного MySQL запроса

-~{}~ 09.02.06 01:44:

простите что темы две ;(
site gateway error выдавал;(
 

SelenIT

IT-лунатик :)
Сосчитать новости, которые при выводе будут впереди данной (т.е. критерий сортировки меньше), и поделить на число новостей на странице?
 

[Gisma]

Новичок
2 запроса? просто я все думаю можно ли одним, я имею малый опыт составления mysql запросов вот сижу и тренируюсь;)
 

SelenIT

IT-лунатик :)
Можно одним. Если при выводе сортировка по id - имхо, все очевидно. Если нет - то подзапрос либо джойн.
 

[Gisma]

Новичок
да сортировка по id, но мне не очевидно, плохо не знать;(
 

SelenIT

IT-лунатик :)
select ceil(count(*)/штук_на_странице) ... where id <= данный_id

разве не является решением?
 

Solisted

Новичок
Я применяю такой способ:

Делаем выборку нужного количества записей:

SELECT SQL_CALC_FOUND_ROWS `id`, ... FROM ... LIMIT n OFFSET m;

и получаем n записей нужной нам страницы. Далее, выполняем второй запрос:

SELECT FOUND_ROWS();

и узнаем реальное количество записей, найденных MySQL сервером в результате выполнения предидущего запроса без учета выставленного нами ограничения (LIMIT)

Таким образом, можно избежать двукратного повторения одной и той же выборки.

Ссылки по теме:
http://dev.mysql.com/doc/refman/5.0/en/select.html
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html
 

Фанат

oncle terrible
Команда форума
вообще-то, выборка не одна и та же, а совсем разные.
я уж не знаю даже, что может быть настолько разным - запросить одну строку с одним полем или запросить 10 полных строк
 

alexhemp

Новичок
[Gisma]

Логика простая. Предположим есть некоторая последовательность новостей, расположенных по дате.

Выводим их постранично, по N штук на странице.

Как узнать на какую страницу попадет новость с заданным ID?

Все просто - нужно посчитать все записи идущие ПЕРЕД заданной расположив их в нужном нам порядке.

Выходит что-то вроде

Код:
SELECT COUNT(*) AS POS FROM news n, news _news WHERE _news.ID = $id AND n.DT >= _news.DT AND NOW()>n.DT ORDER BY n.DT DESC";
Ну и это число нужно поделить на число новостей на странице.

Семантика твоего поля order мне не ясна, я считаю что нужно использовать естественные данные где они есть. У новостей дата - очень естественный признак.
 

[Gisma]

Новичок
1. Я уже сказал что хотел выдрать номер страницы прямо из запроса.
2. Поле order задает пользовательскую сортировку новостей, поэтому там может твориться что угодно;)
p.s. давайте закроем топик;)
 

Solisted

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

Wicked

Новичок
я щас веду сам с собой дискуссии на тему, хорошо ли это, но...

и узнавание порядкового номера записи при произвольной сортировке, и узнавание страницы, и выбор N записей для этой страницы - делается на стороне ПХП при использовании всего одного mysql_query и (N + log2(mysql_num_rows())) операций типа mysql_fetch_assoc.
 
Сверху