Page 1 sur 2

selection aleatoire

Posté : 18 nov. 2005, 12:55
par donatello
Bonjour,
je souhaite créer une requête qui sélectionne 4 enregistrements au hasard dans une table à partir de leur id, sachant qu'un même enregistrement ne peut être tiré 2 fois.
J'enregistre ensuite les 4 sélections dans des vars de session pour traitement.
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
while ($total = mysql_fetch_array($result)) {

//création tableau sélection dans la session
$_SESSION['selection0'] = $total[0]; 
$_SESSION['selection1'] = $total[1] ;
$_SESSION['selection2'] = $total[2] ;
$_SESSION['selection3'] = $total[3] ;
}
Ce qui est étrange, c'est que par exemple echo $total[0] ne m'affiche rien,
mais echo $_SESSION['selection0'] me retournera bien un chiffre. idem pour les autres sélections.
Voyez vous ce qui ne va pas?

Posté : 18 nov. 2005, 12:58
par donatello
de la même manière,
echo count($total);
me retourne 1, alors que
echo count($_SESSION)
me retourne 4

Posté : 18 nov. 2005, 13:23
par Maitrepylos
Le while fais une boucle donc tu devrais avoir ceci
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
while ($total = mysql_fetch_array($result)) {

//création tableau sélection dans la session
$_SESSION['selection'] = $total;
}
Ce qui ne t'arrangeras pas
mais ceci devrait-fonctionner non
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
$total = mysql_fetch_array($result)

//création tableau sélection dans la session
$_SESSION['selection0'] = $total[0];
$_SESSION['selection1'] = $total[1] ;
$_SESSION['selection2'] = $total[2] ;
$_SESSION['selection3'] = $total[3] ;
Heu c'est juste une réflexion

Posté : 18 nov. 2005, 13:37
par donatello
ça ne marche pas à cause de la boucle while qui manque sur le fetch_array

Posté : 18 nov. 2005, 14:54
par Invité
et si tu fais
var_dump ($total)
cela donne quoi?

Posté : 18 nov. 2005, 15:05
par donatello
avec var_dump j'obtiens
bool(false)
 

Posté : 18 nov. 2005, 15:07
par donatello
j'ai tendence à penser que c'est ma requête qui est mal construite, parcequ je ne vois vraiment pas pourquoi $total ne serait pas un tableau de 4 éléments.

Posté : 18 nov. 2005, 15:14
par donatello
Bon, la requete a l'air bonne car quand je fais
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4"; 
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() ); 
while ($total = mysql_fetch_array($result)) { 

//création tableau sélection dans la session 
echo $total[0]; 
echo $total[1] ; 
echo $total[2] ; 
echo $total[3] ; 
} 
j'obtiens bien 4 valeurs distinctes. ça veut dire que le pb vient de l'enregistrement des éléments de $total dans la session, mais je ne vois pas ce qui cloche là...

Posté : 18 nov. 2005, 15:25
par Maitrepylos
avec var_dump j'obtiens
bool(false)
 
Ben là tu devrais avoir un tableau de 4 éléménts, après avoir fais mysql_fetch=_array

Posté : 18 nov. 2005, 15:28
par rami
Salut,

Essaies cela:
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
while ($row = mysql_fetch_row($result)) 
     $total[] = $row[0];

foreach($total as $id) 
     echo 'Total: '.$id.'<br>';

Posté : 18 nov. 2005, 15:31
par donatello
Salut,

Essaies cela:
PHP:
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
while ($row = mysql_fetch_row($result))
$total[] = $row[0];

foreach($total as $id)
echo 'Total: '.$id.'<br>';
ben ça marche parceque je ne fais pas appel à $_SESSION dans ce cas.

Posté : 18 nov. 2005, 15:44
par donatello
pour éviter de se perdre, je récapitule ma question:
Pourquoi en faisant ceci
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4"; 
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() ); 
while ($total = mysql_fetch_array($result)) { 

//création tableau sélection dans la session 
$_SESSION['selection0'] = $total[0]; 
$_SESSION['selection1'] = $total[1] ; 
$_SESSION['selection2'] = $total[2] ; 
$_SESSION['selection3'] = $total[3] ; 
} 
on obtient count($total)=1, mais en faisant ceci
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4"; 
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() ); 
while ($total = mysql_fetch_array($result)) { 

//création tableau sélection dans la session 
echo $total[0]; 
echo $total[1] ; 
echo $total[2] ; 
echo $total[3] ; 
} 
on obtient count($total)=4

Posté : 18 nov. 2005, 15:46
par rami
Il suffit d'adapter un peu le code:
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
while ($row = mysql_fetch_row($result))
{
     $_SESSION['selection'][]=$row[0];
}
Tu obtiens une variable de session $_SESSION['selection'] étant elle-même u n tableau (tu y accèdes ainsi: $_SESSION['selection'][0] : sélection 1, $_SESSION['selection'][1] : sélection 2...)

Posté : 18 nov. 2005, 21:55
par donatello
ripat, ta première solution me plait pas mal.
Seule interrogation, je pensais qu'à chaque actulisation de la page, la sélection aléatoire reprendrait depuis le début.
dans mon cas, la sélection est toujours la même quand on actualise la page.
Est-ce normal?

Posté : 19 nov. 2005, 00:33
par rami
:?:

Je te propose sinon cela:
$requete = "SELECT DISTINCT ID FROM occasions ORDER BY RAND() LIMIT 4";
$result= mysql_query($requete) or die (mysql_error() . mysql_errno() );
$i=0;
while ($row = mysql_fetch_row($result))
{
     $_SESSION['selection'.$i]=$row[0];
     $i++;
}
En sortie, tu auras tes variables de session $_SESSION['selection0'],$_SESSION['selection1']...
Testes ce code et dis si ca convient.