Intereting Posts

Разбиение страниц с помощью MySQLi

Я наращиваю собственную CMS. У меня есть система администрирования, и теперь я могу вставлять сообщения, показывая сообщения, это не проблема, но разбиение на страницы – это проблема для меня.

И это мой запрос:

SELECT * FROM `posts` WHERE `status` != 'draft' 

Любая помощь приветствуется!

Related of "Разбиение страниц с помощью MySQLi"

Создайте свой запрос, чтобы иметь 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 с точки зрения разбивки на страницы (так как вы можете получить повторяющиеся строки (на разных страницах))

Чтобы рисовать с помощью PHP

Что-то вроде этого должно быть достаточно

 $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;"; } 

Как было предложено в комментариях, хорошей практикой является использование инструкций подготовки, привязки параметров