8791 sujets

Développement web côté serveur, CMS

Je sais afficher avec un ordre aléatoire un texte depuis ma base de données , cependant je n'arrive pas à trouver un moyen d’empêcher la répétition d'un même texte.
A travers un systeme de session, le visiteur clique sur suivant et les textes défilent aléatoirement sans se répéter.
Merci à ceux qui pourront m'apporter leur aide Smiley smile


<?php
session_start();
$_SESSION['pseudo'];

try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=mysql51-57.perso;dbname=', '', '', $pdo_options);

$reponse = $bdd->query('SELECT * FROM textesaleatoire ORDER BY rand() LIMIT 1,1');
while ($donnees = $reponse->fetch())
{
<?
Bonjour,

je pense que le plus simple serait de stocker les identifiants des textes déjà sortis en table temporaire et de baser ta requête sur l'exclusion des données de la table temporaire.

ta requête deviendrait un truc du style :

"SELECT * 
FROM textesaleatoire 
WHERE textesaleatoire.Id NOT IN (SELECT Id FROM TempText WHERE TempText.IdUser = ".$IdUser.")
ORDER BY rand() 
LIMIT 1,1"


(bien sur je ne connais pas tes champs donc c'est juste pour l'exemple)
Pourquoi ne pas éviter d'aller attaquer la BDD pour chaque entrée que tu ne veux pas?
Pour ma part je pencherais plus sur une récupération d'une partie des phrase dans un tableau à chaque phrase affichée tu la retires du tableau et une fois le tableau vide tu recharges d'autres phrases.
ça ferait en gros :
chargement de 50 phrases dans le tableau
affichage phrase 1
suppression phrase 1
....
affichage phrase 50
suppression phrase 50
chargement de 50 phrases dans le tableau

Je ne pense pas que cela soit optimal niveau performance mais un petit plus que d'aller solliciter la BDD constamment Smiley smile .