Page 1 sur 1

afficher les plus grande valeur de facon aléatoire

Posté : 02 mars 2010, 14:18
par wwwbillgates
Bonjour à tous, alors là je sèche...arf!
J'ai créé un systeme de clic sur image pour ensuite afficher en page d'accueil celles qui ont été le plus cliquées dans la semaine. J'ai donc dans ma base de donnée un champ clic_image qui indique la quantité de clic de la semaine. Mais lorsque plusieur images ont la même quantité de clic je n'arrive pas a réaliser un affichage alléatoir. En effet si plusieur images on recu le meme nombre de clics alors mon SELECT ayant un LIMIT de 0, 2 affiche toujours les meme images... j'ai pensé que la fonction getrandmax() serait parfaite pour résoudre le problème puisque quelle retourne apparement la plus grande valeur aléatoire possible, mais j'arrive a rien avec la doc, arf!!! #-o

voici un extrais de mon tit bou de code :
$reponse = mysql_query("
						SELECT photo, nom
						FROM description_celebrite
						ORDER BY clic_image DESC
						LIMIT 0, 2
					   "); 



while ($donnees = mysql_fetch_array($reponse) )
{
	?>
	<div class="vignettes_au_hasard">
		<a href="javascript:PopupImage('images/<?php echo $donnees['photo']; ?>')"><img src="thumb/<?php echo $donnees['photo']; ?>"></a>
		<span class="nom_au_hasard"><?php echo $donnees['nom']; ?></span>
	</div>
	<?php  
}

Re: afficher les plus grande valeur de facon aléatoire

Posté : 02 mars 2010, 14:59
par macgawel
C'est plus un problème de requête, je pense.
SELECT photo, nom
FROM description_celebrite
WHERE clic_image = (SELECT MAX(clic_image) FROM description_celebrite)
Devrait te sortir la liste des photos ayant eu le plus de clics.
Eventuellement, tu peux trier (sur autre chose que le nombre de clics :roll: ).
Tu peux aussi mettre une LIMIT. En fait, suivant le nombre de photos ce serait même conseillé : en début de semaine tu auras forcément un moment où toutes les photos auront zéro clic.

Ensuite, il te reste à créer dans PHP un tableau contenant les valeurs retournées, et à faire un array_rand($Tableau, $nombre_d_images) dessus...

Re: afficher les plus grande valeur de facon aléatoire

Posté : 03 mars 2010, 15:27
par wwwbillgates
j'ai fais comme tu ma dit mais maintenant ca n'affiche que l'image ayant le plus grand score de ma base de donnée, arf!!! :? alors comme je suis débutant je n'sais pas si j'ai fais comme il faut mais en fait sque jvoudrais faire serait d'afficher comme mon code un ORDER BY clic_image DESC mais avec en plus un classement alléatoire style rand() pour les images cliqué le même nombre de fois. Comme ca ca permet aussi quand je remet tout les compteurs à zéro à ce que toutes les images soit affichés de façon alléatoire car actuellement malgré quelles soit toutes à zéro on a toujours les même images qui sont affichés en premier. :( merci quand meme de ton aide :wink:

Re: afficher les plus grande valeur de facon aléatoire

Posté : 04 mars 2010, 00:33
par AB
Et bien, en reprenant ton code, pourquoi ne fait tu pas simplement un tableau avec le résultat de ta requête initiale, et ensuite tu mélange les éléments du tableau ?
$reponse = mysql_query("
                                                SELECT photo, nom
                                                FROM description_celebrite
                                                ORDER BY clic_image DESC
                                                LIMIT 0, 2
                                           ");

//Initialisation du tableau

$tab_result = array();

//Crée un tableau avec le nom de la photo comme index et l'adresse de la photo comme valeur

while ($donnees = mysql_fetch_array($reponse) )
{
$tab_result[$donnees['nom']] = $donnees['photo'];
}

//on mélange les éléments du tableau
shuffle($tab_result);

// Et maintenant tu liste ton tableau pour afficher tes images
foreach ($tab_result as $nom => $adresse)
{ ?>
<p><img src="thumb/<?php  echo $adresse; ?>" /></p>
<span class="nom_au_hasard"><?php echo $nom; ?></span>
<?php } ?>
A chaque rafraichissement de la page tu devrais avoir tes trois images (puisque tu fait un limit 0,2) qui s'affiche dans un ordre différent. Encore que pour trois images le hasard peut faire qu'elle s'affichent deux fois de suite dans le même ordre mais cela devrait être peu fréquent.

J'ai pas testé le code ci dessus mais c'est le principe.

Re: afficher les plus grande valeur de facon aléatoire

Posté : 04 mars 2010, 10:57
par angus666
Bonjour à toi,

Il y a la fonction RAND de mysql que tu peux coupler à l'ordre de tri ORDER BY:
SELECT photo, nom
                                                FROM description_celebrite
                                                ORDER BY clic_image DESC, RAND()
                                                LIMIT 0, 2


Re: afficher les plus grande valeur de facon aléatoire

Posté : 04 mars 2010, 12:13
par wwwbillgates
ma ma ma truc de ouf c'est exactement pile poil ça que jvoulais faire Angus666 , j'ai essayé de le placer partout ce rand() mais sans succès..... mmmmh il allait là le ptit malin. Merci à tous de votre aide bonne journée :wink: