Page 1 sur 1

order by rand... et plusieurs pages

Posté : 12 sept. 2006, 15:08
par chabrun.myriam
bonjour
je recupere des donnees par morceaux dans une base et je les affiche dans un tableau html par l'intermediaire du php. J'ai plusieurs pages si le nombre de donnees correspondant aux criteres est plus grand que le nombre affiche. Tout se passe bien. Le probleme commence quand je veux recuperer ces donnees dans un ordre aleatoire.
si je les recupere en morceaux, je retombe souvent sur ceux qui ont deja ete presentes.
si je les recupere tous ensemble, que je les mets dans un tableau et que je fais :
srand(time());
shuffle($tablo);

Posté : 12 sept. 2006, 15:11
par zeus
Je ne voudrais pas être désagréable mais ... j'ai rien compris :oops:

Quel est ton soucis exactement ?
Si tu cherches à afficher des éléments via une pagination, tu ne peut faire un tri aléatoire car il te faudrait conserver le 1er tri aléatoire pour ne pas afficher plusieurs fois les meme infos dans différentes pages :-k

order by rand... et plusieurs pages

Posté : 12 sept. 2006, 15:23
par mycha
tu as compris ce que je voulais et que je n'ai pas explicitement explique. Y a-t-il un moyen de memoriser ce qui a ete rechercher pour ne pas le reprendre au deuxieme passage ?

Posté : 12 sept. 2006, 15:44
par zeus
Oui, c'est possible en mettant ton tableau trié en session et en le récupérant lorsque tu changes de page.

Posté : 12 sept. 2006, 15:51
par Henri
Au lieu de faire un order by rand qui sera forcément recalculé à chacune des pages, il faut tout déterminer sur la page 0 :

- tu sélectionnes tous tes ID de toutes les pages dans un tableau
- tu te débrouilles pour les mélanger
- tu stockes ce tableau mélangé dans une variable de session ou un cookie ou un fichier texte ou dans une base de données
- tu extrais les X premiers pour ta première page avec

Code : Tout sélectionner

SELECT ... FROM ... WHERE ID IN (id1, id2, id3, ...)
- et pour les pages suivantes, tu extrais les X caractères à partir du premier de la page dans la variable que tu as stockée.

aleatoire sur plusieurs pages

Posté : 12 sept. 2006, 16:35
par mycha
pour ce qui est de la recuperation des donnees, pas de probleme. Pas de probleme non plus pour les mettre dans un tableau, ni pour melanger ce tableau. Mais comment les mettre dans une variable de session ?
$req_collection = mysql_query("SELECT * FROM article");
// mise de ces enregistrements dans un tableau
while ($res_collection = mysql_fetch_array($req_collection)) {
	$tablo[] = $res_collection;
}
// creation d un chiffrage aleatoire pour affichage aleatoire
srand(time());
// melange du tableau
shuffle($tablo);

Posté : 12 sept. 2006, 16:43
par zeus
Tiens, voilà un petit tutorial qui devrait te permettre de comprendre le principe des sessions et de te familiariser avec la syntaxe ;)

aleatoire sur plusieurs pages

Posté : 12 sept. 2006, 16:51
par mycha
pour les variables de session simples, pas de problemen. Mais là, il faut que je crée une variable de session qui soit un tableau.
$deja_vu = $_SESSION[$tablo]; (est-ce que c'est possible ?)
et que je compare à l'intérieur de ce tableau :
WHERE id_article NOT IN $deja_vu
A l'écrire, ça me paraît bizarre...

aleatoire sur plusieurs pages

Posté : 12 sept. 2006, 16:54
par mycha
erreur de saisie en allant trop vite, je voulais écrire
$deja_vu = $_SESSION[$tablo['id_article']]

Posté : 14 sept. 2006, 13:30
par Henri
A priori, rien ne t'empêche de stocker un tableau dans une variable de session
$liste = ... // un array
$_SESSION["liste_des_items"] = $liste;

$tableaudejavu = $_SESSION["liste_des_items"];
$valeurdejavu = $_SESSION["liste_des_items"][0];

Au passage, éviter d'appeler des tableaux "tablo" : ce qui est important c'est ce qu'il contient, pas comment il stocke l'information.

Deuxièmement, la syntaxe pour faire le select est

Code : Tout sélectionner

WHERE id in (12, 56, 84, 53, 96);
Regarde du côté de la fonction implode pour créer une telle chaîne de caractères à partir du tableau (ou plutôt de l'extrait des x lignes à afficher du tableau).