Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Sql] aide pour requete

jointure et co

    25 août 2011 à 4:09:00

    Bonjour,

    Je coince un peu pour un projet à rendre :(

    J'ai deux table, une serie et un autre album
    chaque serie comporte plusieur album
    album ayant un serie_id pour faire la jointure et un album_id comme id unique de l'album
    je souhaite faire le tri DESC suivant le nombre d'album dans chaque serie via une requete SQL

    exemple:

    Serie 1: album a album b album c (3)
    Serie 2: album a (1)
    Serie 3: album a album b album c album d album e (5)

    Je devrait avoir

    5
    3
    1

    Une idée?? je n'ai pas vraiment d'idée comment faire ceci, a part en php peut etre, mais pas en SQL :(
    Je vous remercie d'avance :)

    Edit: merci modo pour le déplacement :)
    • Partager sur Facebook
    • Partager sur Twitter
      25 août 2011 à 5:13:28

      SELECT COUNT(*) AS nbr
      FROM album
      GROUP BY serie_id
      ORDER BY nbr DESC
      
      • Partager sur Facebook
      • Partager sur Twitter
      Envie de mettre les mains dans le cambouis ? Passez à Funtoo GNU/Linux. DO IT!
        25 août 2011 à 5:25:02

        plus simple que ca, y'a pas! je suis allé chercher trop loin!
        J'ai essayé cette requête , c'est ce que je cherche :)
        Merci bcp :D

        Edit : petit problème j'ai pas calculé le cas ou une serie ne contient pas d'album (pas encore entré dans la base) c'est possible de regrouper les nb-album=0?
        • Partager sur Facebook
        • Partager sur Twitter
          25 août 2011 à 16:57:48

          Tu mets dans t'as base de donnees
          serie_id IS NOT NULL
          

          Tu saura obliger de contenir quelque chose.

          Yoof.
          • Partager sur Facebook
          • Partager sur Twitter
            25 août 2011 à 17:00:05

            Je pense que je me suis mal expirmé ^^

            plutot j'avais dis , une serie contient plusieur album, mais j'ai oublié de dire qu'elle peut ne pas contenir d'album, donc pour une serie je peux avoir 0 comme nb album, du coup avec la requete donné par BigGy, j'ai tout mes series qui ne contiennent par d'album qui ne sont pas affiché dans les resultat :(
            • Partager sur Facebook
            • Partager sur Twitter
              25 août 2011 à 18:27:33

              Normalement quand des tables sont bien creer il ne peut y avoir de valeurs 0.
              Ce qui est ton cas.
              Perso je vois pas comment regler ce probleme qui pour moi n'en est pas un.
              Vu que c'est logique de ne pas creer de series si il y n'y a pas de livres dedans...

              Yoof.
              • Partager sur Facebook
              • Partager sur Twitter
                25 août 2011 à 18:29:32

                oui justement :)) mais le prob c'est que le webmaster créée sa serie avant et peut attendre d'avoir plus d'information sur les album pour les mettre, du coup on aura parfois des serie avec 0 album non publié :)

                Merci quand même :)

                EDit:je ne sais pas si c'est faisable, l'idée de parcourir Serie par Serie et de comptabiliser combien a d'album correspondant, je ne peux pas voir ca en SQL , en php peut etre, mais ca serait largement mieux une requete SQL :D

                MErci



                • Partager sur Facebook
                • Partager sur Twitter
                  25 août 2011 à 19:55:20

                  SELECT A.nom_album AS nom, COUNT(*) AS nbr
                  FROM album A
                  RIGHT OUTER JOIN serie S ON A.serie_id = S.serie_id
                  GROUP BY serie_id
                  ORDER BY nbr DESC
                  


                  Ca devrait te sortir les séries qui n'ont pas encore d'album.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 septembre 2011 à 2:50:12

                    hmm j'ai essayé la requête, ca ne donne pas un resultat logique :/ Merci Skypers, j'ai fini par passé par php, en fesant un tri sur le tableau renvoyé par la requête.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 septembre 2011 à 8:09:53

                      Citation : tatto86

                      hmm j'ai essayé la requête, ca ne donne pas un resultat logique :/ Merci Skypers, j'ai fini par passé par php, en fesant un tri sur le tableau renvoyé par la requête.


                      Quelle solution horrible. Pourquoi faire en PHP le travail d'un SGBDR ? Si tu abandonnes dès que tu rencontres une petite difficulté, je peux t'assurer que ton code sera un vrai bordel.

                      Slypers va dans la bonne direction : si tu veux récupérer les séries non existantes dans la table album, tu dois donc faire une jointure externe avec la table qui contient toutes les séries. Le problème de sa requête est que la colonne nom_album ne se retrouve pas dans le GROUP BY, donc évidemment, la valeur est indéfinie, et que COUNT(*) comptera aussi les valeurs nulles, retournant donc un résultat faussé. Essaie une requête du genre :

                      SELECT serie_id, COUNT(album_id) AS whatever
                      FROM serie
                      LEFT OUTER JOIN album USING (serie_id)
                      GROUP BY serie_id;
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 septembre 2011 à 15:36:25

                        Citation

                        Quelle solution horrible. Pourquoi faire en PHP le travail d'un SGBDR ? Si tu abandonnes dès que tu rencontres une petite difficulté, je peux t'assurer que ton code sera un vrai bordel.



                        Horrible oui :) mais parfois quand on trouve pas... :p

                        Bon, en ce qui concerne la requete

                        SELECT serie_id, COUNT(album_id) AS whatever
                        FROM serie
                        LEFT OUTER JOIN album USING (serie_id)
                        GROUP BY serie_id;
                        


                        Je ne crois pas qu'il faut cherche dans serie les deux ID puisque c'est depuis album qu'on a l'id vers serie, du coup les deux seront dans album..
                        Si je suis bien dans la bonne direction votre requete serait:

                        SELECT serie_id, serie_nom, COUNT(album_id) AS whatever
                        FROM album
                        LEFT OUTER JOIN serie USING (serie_id)
                        GROUP BY serie_id
                        


                        c'est bien ca??

                        Merci!
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Sql] aide pour requete

                        × 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