hallo,

Voor een project op school moet ik een zoekmachine maken met daarin alle leerlingen.

Het syteem moet na het uitvoeren van de query om de leerlingen op te halen de leerlingen willekeurig met 10 leerlingen per pagina weergeven.

Een leerling mag niet steeds op de eerste pagina weergeven worden hiervoor gebruik ik de mysql functie ORDER BY RAND() maar dan weergeeft hij dezelfde leerling op meerdere pagina's

Weet iemand mischien hoe ik dit kan oplossen?
je kan beter in deze zin eerst alle rijen ophalen en dan denk ik met de arraykey's pagina's maken. i.p.v. de standaard pagination met de SQL query.
Kun je de oplossing nader omschrijven ik begrijp het niet helemaal
Je doet hetzelfde als een standaard pagination systeem alleen ga je niet elke keer een query uitvoeren maar weergeef je ze op basis van de array key in combinatie met de $_GET die je daar voor nodig hebt.
Het syteem moet na het uitvoeren van de query om de leerlingen op te halen de leerlingen willekeurig met 10 leerlingen per pagina weergeven.
Hoe maak je gerbuik van zo'n arraykey onthoudt hij de waarden als je de pagina vernieuwt?
Zorg er voor dat RAND() niet iedere keer opnieuw een random sortering aanmaakt. Hiervoor kun je een seed gebruiken, een getal die je als parameter opgeeft in RAND(). Zolang je dezelfde parameter opgeeft, zul je dezelfde sortering krijgen. Zet deze seed in een sessie of in de url, lees deze uit en zet hem in de RAND(). Ongeacht de pagina (de LIMIT en de OFFSET) zul je altijd zelfde sortering krijgen.

Heel kort:
<?php
if(empty($_GET['seed']) || !ctype_digit($_GET['seed'])){
$seed = rand();
}
else {
$seed = $_GET['seed'];
}

if(empty($_GET['page']) || !ctype_digit($_GET['page'])){
$offset = ($_GET['page'] - 1) * 10; // 10 is het aantal resultaten per pagina, zie ook de LIMIT
}
else {
$offset = 0;
}

$query = "
SELECT
*
FROM
tabelnaam
ORDER BY
RAND(".$seed.")
LIMIT 10
OFFSET ".$offset;
// uitvoeren query, etc. etc.

// NIET VERGETEN OM $seed in je urls te zetten! Evenals het paginanummer
?>


@pgFrank

Bedankt jou oplossong heeft gewerkt.

@ anderen

Jullie ook bedankt voor jullie moeite

Reageren