Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
726 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Selection aleatoire sans doublon

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Selection aleatoire sans doublon

n°573364
Arnow
Posté le 22-11-2003 à 17:52:55  profilanswer
 

voila mon pb:
j'ai besoin de selectionner aleatoirement dans une table un certain nb d'elements sans doublon.
 
j'ai programmer un petit script mais il n'est vraiment pas efficace puisque il me selectionne bien aleatoirement des elements de celle ci mais il sort des doublons puisque a chaque nouvelle selection il selectionne a nouveau dans la totalité de la table.
 
voici le code:

Code :
  1. $res = mysql_query("SELECT max(Id) AS max, min(Id) AS min FROM video_jour" );
  2. $array = mysql_fetch_array($res);
  3. $IdMax = $array["max"];
  4. $IdMin = $array["min"];
  5. mt_srand((float) microtime()*1000000); //initialisation de mt_rand
  6. $randval = mt_rand($IdMin,$IdMax);
  7. $i=1;
  8. while ($i<16)
  9. {
  10. $req_video = mysql_query("select * FROM video_jour WHERE id='$randval'" );
  11. $res_video = mysql_fetch_array($req_video);
  12. $video_jour  = $res_video["nom"];
  13. $video_taille = $res_video["taille"];
  14. $randval = mt_rand($IdMin,$IdMax);
  15. $nom_video_jour = ucfirst($video_jour);
  16. $pos_ = strpos($nom_video_jour,"_" );
  17. $nom_video_jour = substr($nom_video_jour,0,$pos_);


 
si quelq'un a une idée pour optimiser ca ou des conseils pour reecrire un nouveaux script...
merci

mood
Publicité
Posté le 22-11-2003 à 17:52:55  profilanswer
 

n°573381
simogeo
j'ai jamais tué de chats, ...
Posté le 22-11-2003 à 18:33:43  profilanswer
 

quand tu selectionnes un entrée tu stockes son id dans un tableau.
et tu compares toujours l'id de la nouvelle selection aux ids stockées dans la tableau.
 
--> si l'id de la selection courante est pas contenu dans le tableau je garde, sinon je jette......


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°573384
Hermes le ​Messager
Breton Quiétiste
Posté le 22-11-2003 à 18:38:01  profilanswer
 

simogeo a écrit :

quand tu selectionnes un entrée tu stockes son id dans un tableau.
et tu compares toujours l'id de la nouvelle selection aux ids stockées dans la tableau.
 
--> si l'id de la selection courante est pas contenu dans le tableau je garde, sinon je jette......
 


 
ouai, exactement ce que j'aurais fait aussi.
 
Edit : en même temps, imaginons qu'il cherche un nombre aléatoire de 1 à 100 par exemple... Quand il en sera à 90, ça risque d'être un peu long pour qu'il trouve les 10 derniers, vu que php continuera à prendre au hasard un nombre et qu'il sera rejeté... ça peut être lourd comme système dans certains cas.


Message édité par Hermes le Messager le 22-11-2003 à 18:39:59
n°573397
simogeo
j'ai jamais tué de chats, ...
Posté le 22-11-2003 à 19:08:47  profilanswer
 

pour ton edit : on est d'accord ;)


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°573406
Arnow
Posté le 22-11-2003 à 19:24:24  profilanswer
 

merci pour vais reponse, mais je me trouve en fait dans le cas de l'edit de Hermes le Messager.
 
Mais en fait la selection aleatoire a besoin de se faire uniquement une fois par jour: donc serait t'il possible de generer une page fixe a partir de la selection aleatoire(qui prendra donc du temps une seule fois par jour.)
merci

n°573412
Hermes le ​Messager
Breton Quiétiste
Posté le 22-11-2003 à 19:38:22  profilanswer
 

Arnow a écrit :

merci pour vais reponse, mais je me trouve en fait dans le cas de l'edit de Hermes le Messager.
 
Mais en fait la selection aleatoire a besoin de se faire uniquement une fois par jour: donc serait t'il possible de generer une page fixe a partir de la selection aleatoire(qui prendra donc du temps une seule fois par jour.)
merci


 
Si le serveur est à toi oui, sinon non, ou alors en rusant (genre faire appel à un service web spécial (je me souviens plus du nom) ou encore faire en sorte que ton propre ordinateur se connecte au net une fois par jour à telle heure et fasse appel à la page de génération de ta table aléatoire).

n°573423
simogeo
j'ai jamais tué de chats, ...
Posté le 22-11-2003 à 19:55:01  profilanswer
 

Arnow a écrit :

merci pour vais reponse, mais je me trouve en fait dans le cas de l'edit de Hermes le Messager.
 
Mais en fait la selection aleatoire a besoin de se faire uniquement une fois par jour: donc serait t'il possible de generer une page fixe a partir de la selection aleatoire(qui prendra donc du temps une seule fois par jour.)
merci


oui c'est possible tu mets une crontab en place et une tache que tu executes une fois par jour si c'est ton serveur comme le dis HLM sinon webcron.org
 
du reste, tu peux optimiser ton algo .. eventuellement tu concatens les id a ta requête pour les exlures de ton select  [:spamafote]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°573566
omega2
Posté le 23-11-2003 à 00:27:15  profilanswer
 

ben pourquoi il ait pas un "order by rand(colone) limit 0,16 au lieu de faire 16 fois la même requête?
 
En plus, tel qu'il a fait son système, s'il a surprimé des lignes, il risque de sélectionner un id qui n'existe plus.

n°574074
_maximus_
Goret ptit con ^_^
Posté le 23-11-2003 à 20:40:25  profilanswer
 

Hermes le Messager a écrit :


 
Si le serveur est à toi oui, sinon non, ou alors en rusant (genre faire appel à un service web spécial (je me souviens plus du nom) ou encore faire en sorte que ton propre ordinateur se connecte au net une fois par jour à telle heure et fasse appel à la page de génération de ta table aléatoire).
 


 
y a webcron.org, ou un ptit log made in maximus :p
 
 
Sinon pour son prob, il dit utiliser une table si j'ai bien compris.
 
Pq ne pas mettre un champ booleen ( deja_tire ) dans la table qui est a zero tant qu'il a pas ete tiré.
 
Dans le script php on selectionne les donnée avec la fct RAND()
 
$req= "SELECT * FROM matable WHERE deja_tire=0 ORDER BY RAND() LIMIT 0,1";
 
et puis on update le champ a 1 :
 
req = "UPDATE matable SET deja_tire = 1 WHERE id=$id_tire";
 
 
rien de plus simple  [:spamafote]  
 
 
edit:  
 
Oops j'avais pas vu qui veut plusieurs enregistrements a la fois.
 
ben alors il met LIMIT 0, 16 comme dit lus haut.
 
et ensute dans le script on sauve tt les enregistrement qui ont été tirés dans un tableau et puis on update le tout a la fin.
 


Message édité par _maximus_ le 23-11-2003 à 20:42:33

---------------
Ptit con de goret je t'emmerde ^_^

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Selection aleatoire sans doublon

 

Sujets relatifs
[MySQL] Erreur de syntaxe que je ne comprend pas ! (aléatoire en plus)SQL plantage aléatoire ! SqlDumpExceptionHandler help plz !
Choisir élément aléatoire?[Delphi] tirage aléatoire suivant une loi normale ?
ORACLE selection de l'initial de deux champs varchar?selection automatique d'une barre de saisie
selection aleatoireSelection aléatoire
Plus de sujets relatifs à : Selection aleatoire sans doublon


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR