Quelques remarques :
1)
Code :
- $nb_photos = mysql_num_rows(mysql_query("SELECT..." )); // on récupère le nombre de photos
|
Tu demande à mysql de tout t'envoyer juste pour compter le nombre de photos?
Avec ce genre de solution, il ne faut pas t'étonner si ton serveur devient lent. A la place, fais simplement un "select count(*)" et regardes la valeur retourné par mysql. Ca sera beaucoup plus rapide.
2) limit 0,1 => on saute zéro ligne et on en retourne une (on retourne la première)
limit 5,1 => on saute cinq lignes et on en retourne une (on retourne la sixième)
limite 5,2 => on saute cinq lignes et on en retourne deux (on retourne les sixième et septième lignes)
Par conséquent, il faut faire un rand(0,$nb_photos-1); si on veut utiliser le résultat du rand dans la requête.
3)
Code :
- <?php
- $nb_photos = mysql_num_rows(mysql_query("SELECT..." )); // on récupère le nombre de photos
- $aleatoire = rand(0,$nb_photos);
- $requete = mysql_query("SELECT... LIMIT $aleatoire,1" );
- while ($resultats = mysql_fetch_array($requete)) {
- // affichage de la photo
- }
- ?>
|
Avec MYSQL, tu peux résumer tout cet enchainement en un :
Code :
- <?php
- $requete = mysql_query("SELECT... ORDER BY RAND() LIMIT 1" );
- if ($resultats = mysql_fetch_array($requete)) {
- // j'affiche
- }
- ?>
|
Attention, solution à n'utiliser que sur des tables de taille moyennes à petite (devient lent quand on a un grand nombre de lignes).
4) Le coup du array_rand proposé par macgawel est valable quand on a déjà les données dans un tableau, mais dans le cas présent, ça nécessite de récupérer toutes les données de la table (ce que tu fais déjà pour ton décompte) et de tout copier dans un tableau. Tout ça prend du temps et consomme de la mémoire.