Partage
  • Partager sur Facebook
  • Partager sur Twitter

Meilleur solution pour récupérer des données

Relation "one to many"

Sujet résolu
    21 juillet 2011 à 18:17:37

    Bien le bonjour à vous,
    Première fois que je pose dans le forum Base de données :p Et c'est pour demander votre avis sur la question car je ne m'y connais pas non plus des masses en SQL et j'aimerais savoir ce que vous, vous en pensez.

    Donc, imaginons un forum, une catégorie peut avoir plusieurs forums, c'est donc une relation "one to many" et étant donné que ce code n'est pas utilisable ( Enfin je crois pas :euh: ) :
    SELECT Categorie.*, 
           (
              SELECT Forum.*
              FROM Forum
              WHERE Forum.categorie_id = Categorie.id 
           ) AS Forums,
           COUNT(Forums) as nombre_forums
    FROM Categorie;
    


    Quels serait votre solution pour parer cela ? Bien sûr il y a les jointures donc en prenant tous les forums et en joignant les informations des catégories pour ensuite niveau code afficher tous ça, mais bon, sait on jamais y-a-t-il une autre solution que les jointures pour récupérer ce genre de données ?

    Merci d'avance pour vos réponses ;)
    • Partager sur Facebook
    • Partager sur Twitter
      23 juillet 2011 à 0:21:29

      Personne n'a serait ce qu'une idée ? :o
      Je sais pas si c'est possible de faire autrement, mais c'est justement pour le savoir que j'ai posté ici.
      • Partager sur Facebook
      • Partager sur Twitter
        23 juillet 2011 à 10:47:25

        Oui, il faut une jointure, mais tu n'as pas dit précisément ce que tu veux que la requête renvoie.
        • Partager sur Facebook
        • Partager sur Twitter
          23 juillet 2011 à 11:17:37

          Merci pour ta réponse ;) Après, ce que la requête doit retourner ? Eh bien ... Les forums et les catégorie, après je sais dèjà qu'une requête par jointure est possible, je l'ai même dit dans mon premier post, mais j'aimerais savoir pour ma culture sur le SQL si il est possible de procéder autrement, par exemple avec des sous requêtes ? Enfin ... Vu ta réponse on dirait que non ^^'
          • Partager sur Facebook
          • Partager sur Twitter
            23 juillet 2011 à 11:48:15

            Dans une sous-requête comme tu as mis plus haut

            SELECT a,b,c, (SELECT sous-requête) AS d FROM ...

            La sous-requête ne peut retourner qu'un scalaire (UNE valeur, une colonne x une ligne) qui est renvoyé dans la colonne de résultat "d" tout comme les colonnes a,b,c.

            Si elle retourne plusieurs valeurs, le premier SELECT ne peut rien en faire, donc tu as une erreur.

            Si tu veux afficher :

            catégorie 1
              forum 1.1
              forum 1.2
            catégorie 2
              forum 2.1
              forum 2.2


            Tu vois que là tu n'affiches pas une catégorie par forum, donc ça ne rentre pas dans le format d'une requête SELECT, qui renvoie une table, pas un arbre. Donc t'as 2 solutions.

            1) tu fais une jointure qui renvoir une catégorie par ligne et tu n'affiches la catégorie que si elle est différente d'une ligne à la suivante
            2) tu récupères que les forums et ensuite tu fais une requête WHERE category_id IN (...) pour récupérer les catégories à afficher

            • Partager sur Facebook
            • Partager sur Twitter
              23 juillet 2011 à 14:23:16

              Merci de ta réponse ;) Au moins je sais maintenant qu'une sous requêtes comme ça ne peut renvoyer qu'une valeur scalaire. Après tu n'avais pas besoin de tant détailler pour la requête de jointure, hein, je savais déjà comment le faire.

              Bon comme il n'y a aucune autre solution je met ce topic en résolu, encore merci d'avoir répondu ;)
              • Partager sur Facebook
              • Partager sur Twitter

              Meilleur solution pour récupérer des données

              × 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