IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

tirage au sort particulier [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut tirage au sort particulier
    salut,

    je suis en train de développer un script PHP où je tire au sort les entrées d'une table grâce à une requête "ORDER BY RAND()".

    la particularité que j'aimerais ajouter serait d'empêcher la même IP de voir deux fois la même entrée. j'ai donc créé une table log dans laquelle je rentre les IPs et les ids des éléments vus. et à chaque fois qu'un élément est tiré au sort, je scanne la table log, et si l'ip du visiteur a déjà vu cet élément dans la table log, je relance un tirage.

    mon problème c'est que lorsque l'IP a vu tous les éléments, mon script part dans une boucle infinie et tire au sort des éléments en espérant en trouver un qui n'a pas été vu.

    j'avais pensé à mettre une variable $limite, qui bloquerait la recherche après 10 tours par exemple, et qui dirait "il n'existe plus aucun élément non-vu". le problème c'est que mathématiquement la fonction aléatoire peut très bien tirer au sort 10 éléments déjà vus alors qu'il reste des éléments non-vus à voir...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?php
    $found = 0;
    while($found != 1)
    {
    $found = 1;
     
    // requête qui tire au sort un élément
    (...)
     
    // l'élément aléatoire est choisi, peut-on l'utiliser ?
    while($data_random = mysql_fetch_assoc($req_random))
    {
    	// est-ce que l'élément tiré a déjà été vu par l'ip du visiteur ?
    	(...) SELECT * FROM log WHERE ip='$_SERVER[REMOTE_ADDR]'"; (...)
    
    			
    	while($data_log = mysql_fetch_assoc($req_log))
    	{
    	if($data_random['id'] == $data_log['element_id']) { $found = 0; }
    	// si l'élément choisi aléatoirement correspond à une entrée du log pour l'ip du visiteur
    	// alors on ne peut pas l'afficher
    	}
    
    	if($found == 1)
    	{
    	// si on arrive là c'est que l'élément peut être affiché. on sauvegarde les données de la requête dans des variables pour les utiliser plus loin dans la page
    	}
    }
    }
    ?>
    quelqu'un aurait une idée de réécriture ? merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Fait ton rand() uniquement sur les élements que tu veux
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id FROM table_entrees
    WHERE id NOT IN (SELECT id FROM log WHERE ip='12.192.10.8')
    ORDER BY RAND()
    LIMIT 1;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Invité
    Invité(e)
    Par défaut
    solution très élégante que je ne connaissais pas !

    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Tirage au sort aléatoire particulier
    Par marinms dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/12/2010, 17h30
  2. Tirage au sort
    Par Titeuf82 dans le forum Ada
    Réponses: 5
    Dernier message: 17/04/2007, 11h05
  3. Tirage au sort d'un mot
    Par Dav-D dans le forum C
    Réponses: 39
    Dernier message: 04/01/2007, 17h04
  4. [VBA-E] Tirage au sort avec probabilité
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/05/2006, 11h01
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo