Я наращиваю собственную CMS. У меня есть система администрирования, и теперь я могу вставлять сообщения, показывая сообщения, это не проблема, но разбиение на страницы – это проблема для меня.
И это мой запрос:
SELECT * FROM `posts` WHERE `status` != 'draft'
Любая помощь приветствуется!
Создайте свой запрос, чтобы иметь LIMIT
Завершить SQL-результат;
SELECT * FROM posts WHERE status != 'draft' ORDER BY id ASC LIMIT <<offset>>, <<amount>>
Например;
SELECT * FROM posts WHERE status != 'draft' ORDER BY id ASC LIMIT 0, 10 #Fetch first 10 SELECT * FROM posts WHERE status != 'draft' ORDER BY id ASC LIMIT 10, 10 #Fetch next 10
Прочитайте LIMIT
Вам нужно будет ORDER BY
своим первичным ключом, так как небезопасно полагаться на то, что MySQL дает без предложения ORDER BY
с точки зрения разбивки на страницы (так как вы можете получить повторяющиеся строки (на разных страницах))
Что-то вроде этого должно быть достаточно
$intTotalPerPage = 10; $intPage = isset($_GET['page']) && ctype_digit($_GET['page']) ? (int) $_GET['page'] : 0; $strSqlQuery = "SELECT * FROM posts WHERE status != ? ORDER BY `id` ASC LIMIT ?, ?"; $strStatus = 'draft'; $intStart = ($intPage * $intTotalPerPage); $intLimit = $intTotalPerPage; $objDbLink = mysqli_connect("..."); $objGetResults = mysqli_prepare($objDbLink, $strSqlQuery); mysqli_stmt_bind_param($objGetResults, 'sii', $strStatus, $intStart, $intLimit); //Execute query and fetch //Display results $objTotalRows = mysqli_query("SELECT COUNT(id) AS total FROM posts WHERE status != 'draft'"); $arrTotalRows = mysqli_fetch_assoc($objTotalRows); $intTotalPages = ceil($arrTotalRows['total'] / $intTotalPerPage); for ($i = 0; $i <= $intTotalPages; $i++) { echo "<a href='?page=" . $i . "'>[" . $i . "]</a>&bsp;"; }
Как было предложено в комментариях, хорошей практикой является использование инструкций подготовки, привязки параметров