Answer the question
In order to leave comments, you need to log in
How to implement page-by-page data output from a database (PHP, MySQL) with sorting?
Собственно, сабж. Делаю некий сайт пока на локальной машине и столкнулся с проблемой постраничного вывода данных из базы. Сам вывод записей и создание ссылок на следующие страницы вопросов не вызвал, а когда дело дошло до сортировки начал "тупить".
Постраничный вывод все реализуют через SELCT * FROM table LIMIT ?i ?i
, где ?i - сколько записей и с какой начинать. Но если делать сортировку через ORDER BY ...
, то получится что я отсортирую только строки, попадающие под условия лимита, а провести ее надо для всей таблицы и только после этого выводить постранично. Может я что-то не понимаю и есть какой-то другой способ реализации (ну должен же быть). В голову пока ничего не лезет, на просторах сети тоже подобных тем не нашел. Направьте в нужное русло, заранее спасибо!
Answer the question
In order to leave comments, you need to log in
But if you do sorting through ORDER BY ..., then it turns out that I will sort only the rows that fall under the limit conditions, and I need to sort it for the entire table and only then display it page by page.You don't understand correctly.
select id from table
order by id desc
limit 10
I think in this case the only correct solution when sorting is to reset pagination to the first line. All filters work this way.
Гм... а разве лимит накладывается до order ???
Для надежности можно конечно вот так сделать:
select * from
(select * from table order by z) as ordered_table
limit x,y
только как мне кажется последовательность применения все-таки WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
Но если делать сортировку через ORDER BY ..., то получится что я отсортирую только строки, попадающие под условия лимита
Maybe try some ready-made ones?
For example www.pagination.ru
In general, google aside -> pagination php
PS And if your solution, then in theory, if we first save the sorted array into a variable, and then we output it, then it should work as it should.
For example:
$orderby = mysqli_query("SELECT * FROM `qq` ORDER BY `то по чем сотрируем`");
$page = $_GET['page'];
$i = 0;
while ($news = mysql_fetch_assoc($orderby)){
if ($i < 10*$page AND $i > 10*$page+10) {//10 можно в переменную, в которой будет количество записей на страницу.
echo $news;
}
$i++;
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question