представьте, что мы используем разбиение на страницы, чтобы разбить и отобразить результат mysql, подобный этому, отсортированный по идентификатору автоматической регистрации и дате:
SELECT name FROM members ORDER BY id DESC, date DESC LIMIT $start, $len
мы показываем, что ссылки на результат и ссылку на страницу ниже, используя php.
как мы можем найти, что номер идентификатора записи x находится на странице этого результата, поэтому мы устанавливаем номер страницы на эту страницу и отображаем эту страницу, а конечный пользователь не должен нажимать навигацию и находить ее?
Сначала получите общее количество записей.
select count(*) as total from members;
Найти номер члена строки «x» найден в списке записей
select count(*) oneLess from members where id < (select id from members where name='x');
Вышеприведенный запрос возвращает oneLess, номер записи из xie 'x' равен oneLess + 1
Теперь вычислите номер страницы.
$asc_page_no = floor((($oneLess+1)/$total)*$len); $total_pages = floor($total/$len); $page_no = $total_pages - $asc_page_no; //reverse the page looking direction
Затем вычислить $ start
$start = $page_no * $len;
@ У вас есть хорошее решение, но проблема в том, что ваш PRIMARY KEY автосинхронизирован, поэтому возможно, что 2 id не являются последовательными.
Вы должны добавить столбец, чтобы поместить номер, который вы можете контролировать.
После использования программы в ответ @Bere, но не используйте первичный ключ, используйте новый столбец.
Прежде всего, нам нужно определить номер страницы, где находится желаемая строка:
SELECT d.myRowSerial, FLOOR((d.myRowSerial-1)/10) AS pageNumber -- Say, 10 is per page; FROM ( SELECT *, @rownum:=@rownum + 1 AS myRowSerial FROM myTable, (SELECT @rownum:=0) AS nothingButSetInitialValue WHERE 1=1 -- Optional: filter if required, otherwise, omit this line; ORDER BY AnyColumn -- Apply the order you like; ) d WHERE d.myColumn = 'Anything'; -- If you like to limit it to only -- for any specific row(s), similar to the *MAIN query.
У вас будет номер страницы == 0 для страницы 1 и номер страницы == 1 для страницы 2 и т. Д. Затем мы можем просто вычислить номер OFFSET простым вычислением:
$offset = $myRowSerial * $perPage;
Теперь мы можем использовать это значение $ offset для нашего MAIN-запроса.