[PHP] restrictions de la fonction Rand

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


yannouk
WRInaute accro
WRInaute accro
 
Messages: 2138
Inscription: Sam Oct 11, 2003 12:35

[PHP] restrictions de la fonction Rand

Message le Mer Mai 26, 2004 17:08

en gros, je vais essayer de mettre des liens textes tradedoubler, cibleclick etc, en ciblant un max

pour me facilite la vie et mieux jongler avec les liens, j'ai cree une table sql, avec dans chaque rangée un ID et un champs CODE qui contient le code tradedoubler. Ensuite je remplis la table des differents codes que je veux afficher, et je fais appel a eux sur le site.

c'est la que ca coince.
je vais mettre par exemple 10 enregistrements, et, a l'aide de la fonction RAND, je n'en appelle que 3 (avec une boucle for)
la galere, c'est que les 2 memes pubs peuvent sortir! je voudrais ajouter une restriction qui dit que si l'enregistrement "n" est tiré au sort par la fonction rand, il ne doit pas l'etre une deuxiemen fois

quelqun a une idée?
A+!
:).

manitou
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: Mar Avr 06, 2004 14:21

Message le Mer Mai 26, 2004 17:16

J'ai eu le même idée de programme mais je l'ai jamais fini (enfin c'était un peu plus complet).

Pour te répondre la seule solution c'est une boucle while dans laquelle tu examine les choix déjà pris : attention si tu n'as que 2 bannières....ça tourne à l'infini !!


2dm
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 205
Inscription: Mar Sep 03, 2002 19:46

Message le Mer Mai 26, 2004 17:18

tu peux essayer avec "distinct" si tu le fais dans la table ou en rajoutant une condition négative si tu le fais en php.
je pense que "group by" permet aussi de virer les doublons.

StuWee
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 101
Inscription: Jeu Juin 26, 2003 8:36

Message le Mer Mai 26, 2004 17:31

ke je comprenne bien, tu récupère dans la base 10 enregistrement, et ensuite avec php, tu veut en tirer 3 au sort ?

pas besoin de PHP, ni de while ni de truc partout
une seule requette MySql, et tu aura tes 3 enregistrements au hazard, sans doublon :

SELECT * FROM table ORDER BY RAND() LIMIT 3


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Mer Mai 26, 2004 20:46

Intéressant Stuwee, je ne savais pas qu'on pouvait faire ça !


yannouk
WRInaute accro
WRInaute accro
 
Messages: 2138
Inscription: Sam Oct 11, 2003 12:35

Message le Jeu Mai 27, 2004 0:20

t'es genial StuWee :)
en plius j'avais deja vu cette technique quelque part c'est tout con g pas pensé a l'utiliser :) tu fais reduire mon code de 10 lignes dans l'histoire :p
encore merci!


yannouk
WRInaute accro
WRInaute accro
 
Messages: 2138
Inscription: Sam Oct 11, 2003 12:35

Message le Jeu Mai 27, 2004 21:38

alors: ca fonctionne, mais, decidement, je trouve que le random n'est pas "logique"...trop souvent les memes repetitions pour pouvoir etre qu'une coincidence!
je sais qu'il y a une fonction srand ou un truc comme ca, pour initialiser la fonction hasard et qu'elle marche vraiment? mais comment l'utiliser dans une requete sql?

wap
WRInaute passionné
WRInaute passionné
 
Messages: 736
Inscription: Sam Mai 01, 2004 10:34

Message le Jeu Mai 27, 2004 22:51

yannouk a écrit:je sais qu'il y a une fonction srand ou un truc comme ca

Tout dépend de la version de mySQL que tu utilises... Tout est expliqué dans le manuel mySQL...


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Ven Mai 28, 2004 6:36

Bizarre en effet, car rien qu'en choisissant 3 éléments parmi 10, y'a déjà 120 combinaisons...
Perso, la fonction rand() de php a tjs fonctionné correctement chez moi, par contre je l'ai jamais utilisé dans une requête. Cela dit, il me semble me souvenir avoir vu une astuce pour contrer le phénomène que tu décris, mais je ne retrouve pas :?


mahefarivony
WRInaute accro
WRInaute accro
 
Messages: 11405
Inscription: Lun Oct 14, 2002 10:00

Message le Ven Mai 28, 2004 8:55

Bobez a écrit:Perso, la fonction rand() de php


de php ou de mysql ?

StuWee
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 101
Inscription: Jeu Juin 26, 2003 8:36

Message le Ven Mai 28, 2004 9:18

doc MySql a écrit:Notez que la fonction RAND() dans une clause WHERE sera réévaluée à chaque fois que WHERE sera exécuté. RAND() n'est pas un générateur de nombres aléatoires parfait, mais reste une manière rapide de produire des nombres aléatoires ad hoc portables selon les différentes plate-formes pour une même version de MySQL.


autrement, tu peut toujour select tes 10 enregistrements comme avant
mais plutot ke ton system de boucle, utilise array_rand()

$result = array_rand($input, 3);


Bobez
WRInaute passionné
WRInaute passionné
 
Messages: 716
Inscription: Jeu Mai 20, 2004 13:03

Message le Sam Mai 29, 2004 6:42

Ça y est, j'ai retrouvé ce dont je parlais, peut-être que cela résoudra ton problème (pas testé) :

Code: Tout sélectionner
("SELECT * FROM table ORDER BY rand(" . time() . " * " . time() . ") LIMIT 3");


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités