2012-04-23 6 views
0

Я пытаюсь разбивать пользовательскую информацию в каталог. Сначала у меня было что-то вроде этого: /страница = 3 & Количество = 20 & рода = датаMySQL/PHP - разбиение на страницы, сортировка

$floor = ($page-1)*$count; 
$ceiling = $count; 
SELECT * FROM catalog ORDER BY date ASC LIMIT $floor, $ceiling 

Это, как я читал, это плохо, так как он будет считать все результаты, не останавливаясь на достигнутом предел (пол + потолок).

Теперь я пытаюсь сделать это быстрее, пейджинг относительно последнего пункта на странице

/? Last_date = 2012 & Количество = 20 & сортировки = дата

$ceiling = $count; 
SELECT * FROM catalog WHERE date>$last_date ORDER BY date ASC LIMIT $ceiling 

Однако , это не будет работать правильно? Некоторые даты будут одинаковыми. Для аргумента предположим, что я не могу использовать более точную метку времени. Например, сортировка по цене будет идти только до 2 знаков после запятой, и определенно будет перекрываться.

Есть ли что-нибудь, что я могу сделать, чтобы сделать это улучшение, или мне нужно вернуться к моему предыдущему запросу?

+0

Ваш первый подход выглядит хорошо для меня. Можете ли вы понять, почему вы говорите, что это неправильно? –

+0

Отключить тему, но я могу предложить сделать обновление до использования JQuery для разбивки на страницы. – Norse

+0

Я согласен с @GustavoVargas, почему вы отказались от своей первой реализации? И я согласен с Norse, вы можете переписывать функциональность, которую вы можете реализовать из фреймворков. –

ответ

0

В итоге я использовал свой первый пример для разбивки на страницы.

0

Для того, чтобы использовать это, вам придется ограничивать дату в обоих направлениях. То, что вы можете сделать, - это умножить каждый диапазон дат, если он слишком длинный, в противном случае выберите весь набор дат. Недостаток заключается в том, что размеры страниц будут несколько произвольными, и в некоторых случаях может потребоваться больше времени для просмотра результатов.

Это означало бы, что вы также должны сначала сделать count() в этом диапазоне дат, чтобы вы знали, будет ли следующая страница в этом или следующем диапазоне дат.

0

Если я понимаю, что это хорошо, я думаю, что оператор LIKE в выражении WHERE в вашем SQL-заявлении должен помочь ... Но я могу ошибаться, можете ли вы уточнить, что именно неправильно?