par
Truc » 06 déc. 2006, 20:59
sur la page suivante
"L'astuce" du DISTINCT ne fonctionera donc pas puisque tu refait une requete par page.
Le distinct sert dans le cas où tu as plusieurs fois la même valeur pour un champ pour n'en récupérer qu'un exemplaire.
Il te faudrais récupérer les "id" des citations déjà affichées et effectuer une requête avec NOT IN par exemple.
Supposons que tu enregistre les "id" en session" tu as donc:
// variable qui va servir pour construire une requete dynamique en fonction des id déjà affichés une fois
$query_plus = "";
// si la variable de session existe alors on construit la requete avec un implode() sur les id déja affichés.... résultat => AND id NOT IN (1,5,12) .... par exemple
if(isset($_SESSION['les_id']))
$query_plus = " AND id NOT IN (".implode(",",$_SESSION['les_id']).")";
else
$_SESSION['les_id'] = array(); // sinon on initialise la variable de session à vide.
//requete dynamique avec le bout de requete à ajouter le cas échéant
$query = "SELECT DISTINCT mon_champ FROM ma_table ".$query_plus." ORDER BY RAND()";
$tab_id = array();
//exécution requete et boucle
{
$tab_id[] = $id; //id de la requete, citation affichée
}
// récupération des id en sesion en "concaténant" les tableaux de session et des "id" actuellement affichés pour les exclure de la requete suivante
$_SESSION['les_id']=array_merge($_SESSION['les_id'],$tab_id);
[quote="Stegue"] sur la page suivante[/quote]
"L'astuce" du DISTINCT ne fonctionera donc pas puisque tu refait une requete par page.
Le distinct sert dans le cas où tu as plusieurs fois la même valeur pour un champ pour n'en récupérer qu'un exemplaire.
Il te faudrais récupérer les "id" des citations déjà affichées et effectuer une requête avec NOT IN par exemple.
Supposons que tu enregistre les "id" en session" tu as donc:
[php]
// variable qui va servir pour construire une requete dynamique en fonction des id déjà affichés une fois
$query_plus = "";
// si la variable de session existe alors on construit la requete avec un implode() sur les id déja affichés.... résultat => AND id NOT IN (1,5,12) .... par exemple
if(isset($_SESSION['les_id']))
$query_plus = " AND id NOT IN (".implode(",",$_SESSION['les_id']).")";
else
$_SESSION['les_id'] = array(); // sinon on initialise la variable de session à vide.
//requete dynamique avec le bout de requete à ajouter le cas échéant
$query = "SELECT DISTINCT mon_champ FROM ma_table ".$query_plus." ORDER BY RAND()";
$tab_id = array();
//exécution requete et boucle
{
$tab_id[] = $id; //id de la requete, citation affichée
}
// récupération des id en sesion en "concaténant" les tableaux de session et des "id" actuellement affichés pour les exclure de la requete suivante
$_SESSION['les_id']=array_merge($_SESSION['les_id'],$tab_id);[/php]