[PHP] restrictions de la fonction Rand

  • Auteur de la discussion Auteur de la discussion yannouk
  • Date de début Date de début
WRInaute passionné
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+!
:).
 
WRInaute discret
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 !!
 
WRInaute discret
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.
 
WRInaute discret
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
 
WRInaute passionné
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!
 
WRInaute passionné
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?
 
WRInaute impliqué
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 :?
 
WRInaute discret
doc MySql a dit:
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);
 
WRInaute impliqué
Ça y est, j'ai retrouvé ce dont je parlais, peut-être que cela résoudra ton problème (pas testé) :

Code:
("SELECT * FROM table ORDER BY rand(" . time() . " * " . time() . ") LIMIT 3");
 
Discussions similaires
Haut