Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage de champs en ordre aléatoire

Sujet résolu
    19 juin 2010 à 17:46:20

    Bonjour à tous.

    Sur mon site, j'ai un menu qui contient les liens vers les sites de mes partenaires.
    J'aimerai afficher ces liens en ordre aléatoire, mais influencé par le nombre de visiteurs que ces sites m'envoie.

    J'ai donc, sur ma base de données, une table partenaires avec les champs suivants:
    -nom (nom du partenaire)
    -url (adresse du site du partenaire)
    -nbrentrees (le nombre de visiteurs envoyés par le partenaire)
    -place (la place aléatoire dans le menu)

    A chaque fois que le menu est affiché: une requête change la valeur du champ place en une valeur aléatoire comprise entre 0 et nbrentrees pour chaque ligne de la table partenaires.
    Puis j'affiche les liens du menu en ordre croissant du champ place.

    Mais je me demande si cette façon de procéder n'est pas trop gourmande en requêtes.
    Si oui, y a t'il une autre façon de faire?

    J'espère avoir réussi à bien expliquer ma question.
    En vous remerciant par avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      19 juin 2010 à 18:52:53

      Salut,

      Effectivement la méthode sera peut-être un peu trop gourmande en requêtes, surtout si tu fais une mise à jour de la table chaque fois que la page est affichée (un petit malin pourrait garder le doigt appuyé sur F5 et surcharger ton SGBD :-° ).

      Une solution plus simple serait de placer le calcul de la place directement dans le SELECT qui va chercher les partenaires lors de l'affichage de la page :
      SELECT nom, url, nbrentrees, (nbrentrees * RAND() ... etc) AS place
        FROM partenaires
      

      Tu évites de faire des mises à jour répétées (et tu gagne une colonne dans ta table) ;)

      A+,
      • Partager sur Facebook
      • Partager sur Twitter

      "'But I don't want to go among mad people,' said Alice. 'Oh, you can't help that,' said the cat. 'We're all mad here.'" Lewis Carroll

        19 juin 2010 à 20:22:00

        Merci, je ne connaissais pas du tout cette façon de faire.
        Je ne vois pas quoi mettre mettre à la place du ...etc.
        j'ai essayé ça:

        mysql_query("SELECT nom, url, nbrentrees, rand(0,nbrentrees) AS place FROM partenaires WHERE nbrentrees >= 1 ORDER BY place);
        


        Mais ça ne marche pas, j'obtiens le message d'erreur suivant: "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource"

        J'ai fait deux trois recherches sur le site et sur google, mais je n'ai rien trouvé qui m'aide.

        EDIT: Finallement c'est bon, j'ai réussi grâce au cours de M@teo21 sur les fonctions sql et la documentation mysql sur les fonctions mathématiques.

        Voici la requête finale:
        mysql_query("SELECT nom, url, nbrentrees, nbrentrees*RAND() AS place FROM partenaires WHERE nbrentrees >= 1 ORDER BY place);
        


        Merci Misterdi
        • Partager sur Facebook
        • Partager sur Twitter

        Affichage de champs en ordre aléatoire

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown