sql >> Database teknologi >  >> RDS >> Mysql

Kompliceret forespørgsel + sideinddelingsscript

Jeg er ikke sikker på, hvor meget dette vil hjælpe dig, men

1.) Hvor er din $uid defineret på? Måske var det der, og jeg savnede det, fordi du havde MEGET kode. Hvis det var defineret i en controller eller en anden type mellemmandsfil, så blev uid'et måske deaktiveret, da du skiftede sider?

2.) Hvis du bruger den samme paginering mere end én gang, så opret den til en funktion.

Jeg går ud fra, at de resultater, du fik, var korrekte ved at bruge den forespørgsel, du brugte, det eneste problem med det var, at det ikke viste de korrekte resultater på andre sider. Hvis det er tilfældet, så brug denne funktion, jeg justerede. (Du skal muligvis justere det selv, f.eks. kan din side ikke læse domain.com/pg=3 som min gør)

function Pagination($list, $limit){

global $pagination;
global $total_pages;
global $pg;
global $offset;
global $page_limit;
$page_limit = $limit;
global $total_results;
$total_results = $list;

global $offset;

// number of rows to show per page
// find out total pages
$total_pages = ceil($list / $limit);

// get the current page or set a default
if ($pagination) {
   // cast var as int
   $pg = $pagination;
} else {
   // default page num
   $pg = 1;
} // end if

// if current page is greater than total pages...
if ($pg > $total_pages || $pg == "last") {
   // set current page to last page
   $pg = $total_pages;
} // end if
// if current page is less than first page...
if ($pg <= 1 || $pg == "first") {
   // set current page to first page
   $pg = 1;
} // end if

// the offset of the list, based on current page 
$offset = ($pg - 1) * $limit;

// get the info from the db 
}


function PaginationLinks($url, $tab){

global $pg;
global $total_pages;
global $total_results;
global $page_limit;
global $offset;


$displayed_results = ($total_results - $offset);

if($displayed_results >= $page_limit && $total_results > $page_limit){
$displayed_results = $page_limit;
}




/******  build the pagination links ******/
// range of num links to show
$range = 5;

if($tab){
$tab = "?$tab";
}

// if not on page 1, don't show back links
if ($pg > 1) {
   // show << link to go back to page 1
   echo "<li class='pagination'><a href='$url/pg=first$tab'><<</a></li>";
   // get previous page num
   $prevpage = $pg - 1;
   // show < link to go back to 1 page
   echo "<li class='pagination'><a href='$url/pg=$prevpage$tab'><</a></li>";
} // end if 

// loop to show links to range of pages around current page
for ($x = ($pg - $range); $x < (($pg + $range) + 1); $x++) {
   // if it's a valid page number...
   if (($x > 0) && ($x <= $total_pages)) {
      // if we're on current page...
      if ($x == $pg) {
         // 'highlight' it but don't make a link
         echo "<li class='current_page'>$x</li>";
      // if not current page...
      } else {
         // make it a link
         echo "<li class='pagination'><a href='$url/pg=$x$tab'>$x</a></li>";
      } // end else
   } // end if 
} // end for

// if not on last page, show forward and last page links        
if ($pg != $total_pages) {
   // get next page
   $nextpage = $pg + 1;
    // echo forward link for next page 
   echo "<li class='pagination'><a href='$url/pg=$nextpage$tab'>></a></li>";
   // echo forward link for lastpage
   echo "<li class='pagination'><a href='$url/pg=last$tab'>>></a></li>";
} // end if
/****** end build pagination links ******/

echo "<div style='float:right; align: right; margin-top: 10px'>Displaying <font class='f2'>$displayed_results</font> of <font class='f2'>$total_results</font> results</div>";
} // end pagination links function

For at bruge: (Jeg bruger den grundlæggende "bruger"-tabel, fordi den er enkel)

Skriv en forespørgsel for at få det samlede antal rækker for det, du leder efter. Eksempel:

$getusers = mysql_query("SELECT * FROM users", $conn);
$total_users = mysql_num_rows($getusers)

$display_limit = "20" // display 20 users per page

brug derefter den første funktion.

Pagination($total_users, $display_limit);

kør derefter forespørgslen igen, men sæt grænserne denne gang, så der kun vises 20 brugere pr. side.

$getusers = mysql_query("SELECT * FROM users ORDER BY id DESC LIMIT $offset, $display_limit", $conn);

if($total_users == 0){
echo "There are no users at this time.";
}
else {

// for each user
while ($rowuserss = mysql_fetch_assoc($getusers)) {
   // echo data

$user_id = $rowusers['id'];
$username = $rowusers['username'];

// etc etc
}

Brug derefter den anden forespørgsel

for at vise linkene
PaginationLinks($url_to_go_to, $optional_tab_if_you_need_to_select_a_default_tab);

Dette burde fungere for ENHVER forespørgsel, uanset hvor kompliceret, så længe din forespørgsel er korrekt til at begynde med. Det lød for mig, som om din forespørgsel var korrekt, bare resultaterne blev vist på den anden side. På nogen måde, hvis den funktion ikke virker for dig, bør du stadig oprette din paginering i dens egen funktion, det er for meget kode til at blive skrevet ud på mere end ét sted.




  1. Databaseprofilering i IRI Workbench

  2. Hvordan bygger man næste og tidligere links med php?

  3. Hvordan sletter man poster i tabellen, som gentages?

  4. Hvordan kontrollerer man, om DataReader-værdien ikke er null?