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

Langage PHP Discussion :

[Tableaux] Affichage aléatoire... ou presque !


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Tableaux] Affichage aléatoire... ou presque !
    Salut,

    Pour afficher les bannieres sur mon site dans un ordre aléatoire j'utilise la fonction ORDER BY rand() de MySQL... Tout ce qu'il y a de plus basique.

    Pour mettre certaines bannières plus en avant par rapport aux autres, ça arrive que j'insère une même bannière dans 2 lignes sur ma base de donnée... Une astuce qui a ses limites !

    Je voudrais savoir s'il serait possible d'affecter une sorte de coefficient à une banniere donnée qui "truquerait" un peu le résultat de la fonction rand() de manière a afficher plus ou moins une bannière par rapport à une autre.

    Merci

  2. #2
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Salut, avec MySQL je ne sais pas, avec PHP oui c'est facile. Un truc dans ce genre :
    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
    $sql = 'SELECT img, coef FROM bannieres';
    $result = mysql_query($sql) OR die(mysql_error());
     
    $ary = array();
    while ($row = mysql_fetch_assoc($result))
    {
       for ($i = 0; $i < $row['coef']; $i++)
       {
          $ary[] = $row['img'];
       }
    }
     
    // maintenant on prend une ligne aléatoirement :
    $rand_key = array_rand($ary, 1);
    echo $ary[$rand_key];
    Pas ce qu'il y a de plus légé par contre
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Ok je vois le principe

    C'est vrai que ca fait beaucoup de code juste pour une bannière mais ca me donne déja une piste de réflexion. A moins d'essayer d'optimiser maintenant.

    Merci

  4. #4
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Bah disons que l'histoire des doubles entrées de banière était une bonne idée je trouve. Une autre solution du même gout :
    Créer une table "bannière" qui contient donc l'ID de ta banière, son image, le lien du site, etc ...
    Créer une table "banniere_coef" qui contient un champ : banniere_id (cette table ne possède pas de clef primaire ou d'index).

    Ensuite tu fais un ORDER BY rand() dans cette table avec une jointure sur la première table pour l'ID.

    Bien entendu dans cette seconde table tu as une entrée par coeficien, par exemple si ta bannière a un coeeficien 3 elle aura trois entrées dans cette seconde table.
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  5. #5
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    imaginons une table des bannière avec une valeur associé tel que:

    banière1 50
    banière2 100
    banière3 200
    banière4 250

    tu tire un nombre au hasard compris entre 0 et < max(valeur) soit 250

    ensuite tu fait une requête du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM banieres WHERE valeur>hasard ORDER BY valeur LIMIT 1
    si hasard vaut 123 par exemple, alors ta requete te retourne la banière associée à la valeur 200

    tu calcul les valeurs en fonction de la probabilité à laquelle doivent
    apparaitre tes banières.

    par exemple la banière 3 a 100 chances sur 250 de sortir, alors que la banière 4 n'a que 50 chances sur 250.

    j'espère que mon charabia a été suffisamment clair :-)

    A+
    Marc
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

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

Discussions similaires

  1. [Tableaux] Affichage aléatoire au rechargement
    Par ccsuperstar dans le forum Langage
    Réponses: 4
    Dernier message: 04/01/2008, 11h29
  2. Réponses: 1
    Dernier message: 18/10/2007, 00h18
  3. Affichage aléatoire avec coéfficients
    Par groupejtt dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 08/11/2005, 22h09
  4. [Tableaux] Affichage
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 05/11/2005, 13h46
  5. [Tableaux] Images aléatoire et lien
    Par antoinelavigne dans le forum Langage
    Réponses: 7
    Dernier message: 17/09/2005, 20h03

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