V
V
Vladimir Kuznetsov2016-12-30 10:52:47
PHP
Vladimir Kuznetsov, 2016-12-30 10:52:47

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

5 answer(s)
D
Dmitry Entelis, 2016-12-30
@manullol

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.
First, there is an order by of all rows in the resulting selection.
Then, through limit, it is determined how many and what rows you will receive from the sql server.
Request
select id from table 
order by id desc
limit 10

will return the 10 largest 10 id from the entire table
Well, read the manual, everything is described in what order it is applied dev.mysql.com/doc/refman/5.7/en/select.html

I
Ivan Kondratiev, 2016-12-30
@inik23

I think in this case the only correct solution when sorting is to reset pagination to the first line. All filters work this way.

D
d-stream, 2016-12-30
@d-stream

Гм... а разве лимит накладывается до order ???
Для надежности можно конечно вот так сделать:
select * from
(select * from table order by z) as ordered_table
limit x,y
только как мне кажется последовательность применения все-таки WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT

U
Urvin, 2016-12-30
@Urvin

Но если делать сортировку через ORDER BY ..., то получится что я отсортирую только строки, попадающие под условия лимита

It will not work, first ORDER BY is executed and then LIMIT is cut off from it

D
Danil Sysoev, 2016-12-30
@YoungOldMan

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 question

Ask a Question

731 491 924 answers to any question