måndag 12 juli 2010

PHP sidbläddring / pagination med MySQL RAND()

Ibland vill man ha sidbläddring av slumpmässigt valda poster från en databastabell. För att det ska fungera kan man skapa ett slumptal och spara i en session. Slumptalet används sedan i queryn.

if (!isset($_SESSION['random_number'])) {
srand ((double) microtime( )*1000000);
$random_number = rand( );
$_SESSION['random_number'] = $random_number;
} else {
$random_number = $_SESSION['random_number'];
}

För att inte samma "slumpade" poster ska visa sig när man besökt en annan sida och sedan gått tillbaka måste man ta bort sessionen mellan besöken. För att särskilja de olika sidornas sessioner lägger jag till sidans unika id till sessions-namnet. Skriv såhär istället:

//array med id för de sidor som har slumpad sidbläddring
$page_ids[]=1;
$page_ids[]=2;
$page_ids[]=3;

foreach ($page_ids as &$value) {
if($page_id<>$value){
if (isset($_SESSION['random_number'.$value])) {
unset($_SESSION['random_number'.$value]);//tar bort de andra sidornas sessioner
}
}
}

if (!isset($_SESSION['random_number'.$page_id])) {
srand ((double) microtime( )*1000000);
$random_number = $page_id.rand( );
$_SESSION['random_number'.$page_id] = $random_number;
} else {
$random_number = $_SESSION['random_number'.$page_id];
}

I SQL-queryn, lägg till:
$query.=" ORDER BY RAND(".$random_number.") ";

Se hur sidbläddring / pagination med php fungerar i mitt tidigare inlägg Pagination / Sidbläddring med PHP & Mysql

Inga kommentarer: