Garder en memoire le resultat d'une requete

Résolu/Fermé
maptiviou Messages postés 29 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 19 octobre 2012 - 22 avril 2008 à 16:45
maptiviou Messages postés 29 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 19 octobre 2012 - 24 avril 2008 à 10:22
Bonjour,

Voilà mon souci; Je suis actuellement en train de concevoir un site web de VOD et ce dernier m'affiche 10 vidéos par page en allant chercher ces dernières dans une base de données. Pour le moment, l'affichage de ces vidéos est dans l'ordre decroissant (dernière entrée = première affichée) et j'aimerais que le vidéos s'affiche par ordre aléatoire; j'utilise donc une requête dans laquelle j'ajoute la consigne ORDER BY RAND() mais mon problème est le suivant:

Lorsque l'on change de page, le résultat de la requête est différent de la précédente, ce qui a pour incidence que les vidéos affichées peuvent être les mêmes que sur les pages précédentes.

J'aimerais donc savoir si vous connaissiez un moyen de garder le résultat de la première requête en mémoire (peut être en faisant une session mais je ne suis pas doué pour son élaboration). Ainsi, la requête ne serait effectuée qu'une seule fois et les vidéos affichées sur les pages suivantes seraient en rapport avec celles des pages précédentes et non re-générées aléatoirement à chaque page.

J'espère avoir été assez clair.
Merci d'avance

1 réponse

goldo Messages postés 72 Date d'inscription mercredi 23 juin 2004 Statut Membre Dernière intervention 28 juin 2010 8
22 avril 2008 à 17:18
Houa c'est pas banal comme problème, tu te compliques énormément la vie à afficher les films aléatoirement.

Mais bon ce que je ferais :

1. C'est de mettre le résultat de ta requête aléatoire dans un tableau dynamique.
2. affecter ce tableau à une variable session et aussi affecter à une autre variable session un chiffre qui sera le nombre d'élément dans ce tableau.

Puis sur la première page prendre les 10 premiers éléments du tableau, sur la deuxième les 10 suivants etc...

Avec ce procédé chaque page aura ses propres films, il n'y aura pas de doublons et cela restera toujours aléatoire car lors d'une prochaine visite, les films ne seront pas dans le même ordre.

Pour savoir le nombre de pages que tu auras besoin, il suffit de diviser le nombre d'éléments dans le tableau par 10.
Il faudra aussi utiliser des variables dans l'url pour savoir à partir de où dans le tableau je commence à prendre les 10 films suivant.

Etc...
0
maptiviou Messages postés 29 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 19 octobre 2012
24 avril 2008 à 10:22
Merci d'avoir répondu aussi vite.

Le système de sessions semble être le meilleur moyen d'un point de vu fonctionnel mais il me pose le problème saturation du serveur, il tableau contenant plus de 2000 enregistrements à garder en mémoire pour chaque utilisateur risque de ralentir le chargement des pages.

Je n'en suis pas sûr mais il faudrait le tester, le problème est que le temps commence à manquer (j'y reviendrai plus tard, peut être pour le prochain site web).

Par contre j'ai utilisé une autre technique, un peu moins longue à mettre en place, un peu moins poussée mais tout à fait fonctionnelle par rapport à mes besoins; je la mets au cas où ça en intéresserait certains...

En fait je me suis basé sur la date pour créer une variable de randomisation.

Cette variable aura la forme suivante: AAAAMMJJH (ex: à l'instant même: 200804241)
Elle ne se modifie que 3 fois par jour mais cela est suffisant.
Voici le script php qui m'a permis de faire cela:

// Déclaration des variables:

$a = date("Ymd");
$b = date("H");
$a .= substr($b,0,1);

// Mise en place de la randomisation dans la requête

$sql = 'SELECT * FROM film ORDER BY RAND('.$a.') LIMIT '.$limite.',10';


Voilà donc deux bonnes méthodes pour afficher aléatoirement les enregistrements d'une base de données et de garder le même ordre d'une page à l'autre.


Encore merci goldo
0