Pagination продолжает показывать ту же часть данных SQL

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

У меня проблема с кодом разбивки на страницы. Код показывает номер страницы в URL-адресе, и он дает мне гиперссылки с разбивкой по страницам внизу таблицы. Однако на любой странице, на которую я нажимаю, она выводит ту же самую точную часть данных sql datatable.

Кроме того, я делаю это в WordPress.

// define how many results you want per page $results_per_page = 10; // find out the number of results stored in database $sql='SELECT * FROM ETF'; $result = mysqli_query($con, $sql); $number_of_results = mysqli_num_rows($result); // determine number of total pages available $number_of_pages = ceil($number_of_results/$results_per_page); // determine which page number visitor is currently on if (!isset($_GET['page'])) { $page = 1; } else { $page = $_GET['page']; } // determine the sql LIMIT starting number for the results on the displaying page $this_page_first_result = ($page-1)*$results_per_page; // retrieve selected results from database and display them on page $sql='SELECT * FROM ETF LIMIT ' . $this_page_first_result . "," .$results_per_page; $result = mysqli_query($con, $sql); while($row = mysqli_fetch_array($result)) { echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>'; } // display the links to the pages for ($page=1;$page<=$number_of_pages;$page++) { echo '<a href="index.php/stocks/sec-forms/?page=' . $page . '">' . $page. '</a>'; } 

Пытаться:

 $sql='SELECT * FROM ETF LIMIT ' . $results_per_page . ' OFFSET ' . $this_page_first_result; 

Также, как уже упоминалось, вы должны сортировать по определенному столбцу с «ORDER BY» для получения согласованных результатов.

Вы должны изменить

 $sql='SELECT * FROM ETF'; $result = mysqli_query($con, $sql); $number_of_results = mysqli_num_rows($result); 

к чему-то подобному

 $count = mysqli_fetch_assoc(mysqli_query($con,"SELECT COUNT(*) AS RC FROM ETF")); $number_of_results=$count['RC']; 

потому что быстрее получать счетчик из mysql (индекс, если он является большой таблицей), вместо того, чтобы извлекать все данные таблицы (потому что SELECT *... ) для циклирования его только для подсчета строк.

 // retrieve selected results from database and display them on page $sql='SELECT * FROM ETF LIMIT ' . $this_page_first_result . "," .$results_per_page; 

Вы используете хороший запрос, но используете неправильную функцию для получения своих результатов.

Запрос должен быть

 $sql='SELECT * FROM ETF LIMIT ' . $results_per_page . "," .$this_page_first_result; 

или:

 $sql='SELECT * FROM ETF LIMIT ' . $results_per_page . " OFFSET " .$this_page_first_result; 

Обе эти работы.

+ Изменить

 while($row = mysqli_fetch_array($result)) { echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>'; } 

в

 while($row = mysqli_fetch_assoc($result)) { echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>'; } 

потому что «mysqli_fetch_array» запрашивает индексы ширины массива с шириной (например, 0, 1, 2 …), а не текстовые, которые вы пытаетесь использовать, но «mysqli_fetch_assoc» делает то, что вам нужно.

Полный код должен быть

 <?php $con=mysqli_connect('your server','login to database','database logins password','database name'); // define how many results you want per page $results_per_page=10; // find out the number of results stored in database $count=mysqli_fetch_assoc(mysqli_query($con,"SELECT COUNT(*) AS RC FROM ETF")); $number_of_results=$count['RC']; // determine number of total pages available $number_of_pages=ceil($number_of_results/$results_per_page); // determine which page number visitor is currently on if(!isset($_GET['page'])) { $page=1; } else { $page=$_GET['page']; } // determine the sql LIMIT starting number (OFFSET) for the results on the displaying page $this_page_first_result=($page-1)*$results_per_page; // retrieve selected results from database and display them on page $sql="SELECT * FROM ETF LIMIT $results_per_page,$this_page_first_result"; $result=mysqli_query($con, $sql); // Loop to show results while($row = mysqli_fetch_assoc($result)) { echo $row['ETF'].' '.$row['ETF NAME'].'<br>'; } // display the links to the pages for($page=1;$page<=$number_of_pages;$page++) { echo'<a href="?page='.$page.'">'.$page.'</a> '; } mysqli_close($con); ?>