Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide pour une requête SQL

    8 juin 2010 à 10:29:27

    Salut à tous.

    Je recherche à exécuter une requête SQL me permettant d'afficher les 5 dernières images les plus vues.
    Je vous présente l'architecture de ma table photo :
    create table photo (
      id_photo int(5) not null auto_increment,
      nom_sousCateg varchar(100) not null,
      url_photo varchar(100) not null,
      nbVue_photo varchar(10) not null default '0',
      constraint pk_photo primary key(id_photo)
    )engine=InnoDB;
    


    Je souhaite récupérer les attributs "url_photo" et "nbVue_photo" pour ensuite les afficher.
    Je pense que j'ai besoin d'effectuer une sous-requête d'interrogation.

    Qui peut me dire de quelle fonction j'ai besoin pour récupérer les 5 images qui ont reçues le plus de votes.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2010 à 10:31:58

      Bonjour
      les 5 images qui ont reçues le plus de votes sont bien celle qui ont le plus grand nbVue_photo ?
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2010 à 10:34:49

        En faisant un :
        SELECT *
        FROM photo
        ORDER BY id_photo DESC

        Tu aurais l'id de la dernière photo.

        On admet qu'on met cet id dans la variable $numDernierePhoto

        En imaginant que ce numéro est 48, tu fais un :

        SELECT *
        FROM photo
        WHERE id_photo> ($numDernierePhoto - 5)

        Je sais pas si c'est la meilleure méthode, où si tu comprends bien ce que je dis. :D


        EDIT : Oups, j'ai lu trop vite le topic, je réponds pas du tout à ta question là :-°
        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2010 à 10:37:31

          Il te faut utiliser un champ (nombre_de_vote) pour comptabiliser les votes, puis dans ta requête sql, tu insères une condition du type :

          ORDER BY 'nombre_de_vote' DESC
          LIMIT 0,5
          
          -corrigé après la remarque d'angelo-

          ce qui veut dire : je range les images selon le nombre de votes qu'elles ont reçues (par ordre décroissant), et je ne prends que les 5 premiers.
          • Partager sur Facebook
          • Partager sur Twitter
            8 juin 2010 à 10:40:21

            Fab016: il ne veut pas les 5 dernières photos mais les 5 dernières les mieux notés .
            Quand bien même, avec ta solution, tu te complique la vie pour rien, un simple limit et le tour est joué :)

            Jekk : oui sauf si nbVue_photo joue ce rôle, d'où ma question.
            Par contre attention à l'ordre des instruction. C'est d'abord order by puis limit :)
            • Partager sur Facebook
            • Partager sur Twitter
              8 juin 2010 à 10:49:25

              Merci à tous pour vos réponses très rapides !

              @angelo : Oui, l'attribut "nbVue_photo" contient le nombre de fois dont une photo a été le plus visualisée.

              @Fab016 : Je ne comprends pas pourquoi exécuter un order by sur l'id_photo ?

              -------------------------------------------------

              Edit : Oui, je pense que je vais ajouter un attribut "nombre_de_votes", comme ça j'effectue un order by directement dessus ; donc en gros, je dois effectuer une jointure entre ma table "vote" et ma table "nbVue_photo" ?
              • Partager sur Facebook
              • Partager sur Twitter
                8 juin 2010 à 10:55:32

                Citation : fliewight

                Merci à tous pour vos réponses très rapides !

                @angelo : Oui, l'attribut "nbVue_photo" contient le nombre de fois dont une photo a été le plus visualisée.


                Et donc celle qui a le plus de vois ?
                Car si c'est le cas, tu n'as pas besoin d'un autre attribut
                Tu fais cette requête :
                select url_photo, nbVue_photo from photo order by nbVue_photo desc limit 5
                

                Et le tour est joué :)
                • Partager sur Facebook
                • Partager sur Twitter
                  8 juin 2010 à 11:01:47

                  J'ai déjà effectué cette requête, mais voilà ce que je retrouve dans l'ordre :

                  nbVue_photo : 1
                  nbVue_photo : 1200
                  nbVue_photo : 12400
                  etc.

                  et en-dessous, je retrouve :
                  nbVue_photo : 13
                  nbVue_photo : 14
                  etc.

                  Qu'est-ce que vient faire le "1" en 1ère position ?
                  De plus, la requête ne me semble pas du tout logique, c'est le désordre o_O
                  SELECT url_photo, nbVue_photo
                  FROM photo
                  ORDER BY nbVue_photo
                  


                  ---------------------------

                  Pour information, oui je me suis trompé dans le premier post.
                  Je veux bel et bien afficher les photos les plus vues.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 juin 2010 à 11:06:12

                    Ceci est du au fait que tu n'as pas utiliser le bon type pour nbVue_photo. En effet, tu as mis varchar (chaine de caractère) or il s'agit d'un nombre entier.
                    Si tu peux modifie le type (et n'oublie pas le desc pour avoir le plus grand)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 juin 2010 à 11:13:48

                      Pff mais oui, suis-je bête !
                      Merci de ton aide, désormais je sais comment m'y prendre ;-)

                      Mettre un varchar pour un entier xD, c'est bien la plus belle de mes erreurs.
                      Encore merci ;-)

                      P.S : Merci à tous de votre intervention, c'est sympa :-)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 juin 2010 à 11:25:46

                        Salut,

                        Ce topic a plus sa place dans le forum "Bases de données" que "PHP". Je l'ai déplacé.
                        Maintenant qu'il se trouve dans ce nouveau forum, merci de modifier le titre du topic en respectant ces règles : http://www.siteduzero.com/forum-83-527 [...] html#r5049630 :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Pwaite.net > Transfert de crédit téléphonique et monétisation de site web                                                                                        « I am awesome »

                        Besoin d'aide pour une requête SQL

                        × 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