Partage
  • Partager sur Facebook
  • Partager sur Twitter

jointure pour catégorie/sous catégorie

Sujet résolu
    20 septembre 2006 à 22:04:42

    Bonsoir, je galere pas mal a essayer de fusionner 2 requete en 1, pour un script de catégorie, je fais de la sorte :

    selection des rubrique d'apres l'id_cat X
    requete dans la boucle d'affichage pour savoir si il y'avais des sous catégorie.

    Voici la structure :


      `id_cat` tinyint(4) NOT NULL auto_increment,
      `id_parent` tinyint(3) unsigned NOT NULL,
      `nom` tinytext NOT NULL,


    et quelques enregistrement :

    (1, 0, 'Informatique'),
    (2, 0, 'Argent'),
    (3, 0, 'DVD'),
    (4, 0, 'Jeux & Consoles'),
    (5, 1, 'Disque dur'),
    (6, 1, 'Processeur'),
    (7, 1, 'Moniteur LCD/TFT'),
    (8, 1, 'Carte graphique'),
    (9, 1, 'Webcam'),


    Dans l'exemple concret, j'affiche avec une boucle normal les rubrique avec id_parent 0, ce qui affichera a l'ecran : informatique, argent, dvd, jeux&console.

    Maintenant, plutot que de faire une requete dnas une boucle while pour savoir si il y'a d'autre catégorie, j'aimerais le faire en une requete pour pas avoir 8 requete dès le début ... Pour au final pouvoir obtenir :

    informatique (sous rubrique : oui)
    argent (sous rubrique : non)
    dvd (sous rubrique : non)
    jeux&console (sous rubrique : non)

    simplement déctecté si il y'a des sous rubrique de la catégorie affiché dans la boucle !

    J'ai beau retourné le probleme dans tous les sens, j'ai essayer de faire une jointure, un left join, un count('id_cat'), cela m'affiche 1 partout :) Et comme vous le voyez dans l'exemple, ici la catégorie 1 (informatique) à 5 sous rubriques. Je patoge :(

    Merci beaucoup.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 septembre 2006 à 22:09:25

      euh, je suis pas sur d'avoir compris.
      tes catégories et tes sous-catégories sont dans la même table, c'est ca?
      Si id_parent vaut 0, c'est une catégorie, sinon c'est une sous-catégorie?

      si oui, essaie ca ( pas sur du tout :s )
      SELECT
              t1.nom,
              t2.nom
      FROM
              categorie t1
      LEFT JOIN
              categorie t2 ON t2.id_parent = t1.id_cat
      • Partager sur Facebook
      • Partager sur Twitter
        20 septembre 2006 à 22:19:01

        Oui les catégorie sont ainsi dans la table, au final, il faudrait que le script détecte si pour la catégorie affiché actuelle, si il y'a d'autre sous catégorie correspondant, exemple final :


        Informatique (5)
        Argent (0)
        DVD (0)
        Jeux & Consoles (0)

        en une seul requete, avec donc une sorte de jointure, mais je ne vois vraiment pas si c'est possible.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 septembre 2006 à 22:22:08

          Hum
          essaie ca:
          SELECT
              t1.nom,
              count(*)
          FROM
              categorie t1
          LEFT JOIN
              categorie t2 ON t2.id_parent = t1.id_cat
          GROUP BY
              t1.id_cat


          si ca foire, fais moi un export de ta table, j'essaierai en local ( plus simple que se faire du ping pong avec des requête :p )
          edit: par mp si c'est gros ;)
          • Partager sur Facebook
          • Partager sur Twitter
            20 septembre 2006 à 22:29:45

            La table je l'ai déja donné ;P, merci à toi. (Je n'ai pas réussi a faire marché ton "essai")

            J'ai essayer via divers where ou alias du count(), rien :(
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              20 septembre 2006 à 22:34:42

              J'auras préféré une requpete toue faite masi c'est rien :p:)
              J'ai trouvé un truc qui semble fonctionner:
              SELECT
                  t1.nom,
                  count(t2.id_cat) AS nbr_child
              FROM
                  categorie t1
              LEFT JOIN
                  categorie t2 ON t2.id_parent = t1.id_cat
              WHERE
                  t1.id_parent = 0
              GROUP BY
                  t1.id_cat
              • Partager sur Facebook
              • Partager sur Twitter
                20 septembre 2006 à 22:39:53

                JE T'AIMEEEEEEEEEEEE, tu as toute ma reconnaissance !

                Enfait je ne penssais pas qu'une jointure pouvais etre faite entre la meme table !

                Merci bcp !

                :)

                edit: j'ai juste mis count(t2.id_cat) AS nbr_child a la place du count(*)-1 qui affichait 1 sous rub de disponible alors que ce n'etait pas le cas, maintenant ca marche très bien, merci infiniment :)
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  20 septembre 2006 à 22:43:38

                  On peu faire des jointures sur n'importe quoi :)

                  Par contre, la requpete ne foncitonne pas vraiment :p
                  Avec le -1, elle compte une sous-cat en moins pour les cats qui en ont et 0 pour ceux qui n'en ont pas.
                  Mais si je l'enlève les cat qui n'ont pas de sous-cat ont nbr_child = 1
                  edit: ah beh t'as déjà corrigé :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 septembre 2006 à 22:44:28

                    J'ai corrigé avec : count(t2.id_cat) AS nbr_child

                    :o)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      20 septembre 2006 à 22:49:20

                      Ca change des topics habituels, ca fait du bien un problème neuf de temps en temps ;P
                      Secret (cliquez pour afficher)
                      Un petit clic sur le lien pour mettre en résolu :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      jointure pour catégorie/sous catégorie

                      × 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