Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Aide] Forums et Jointures

Comment faire ?

Anonyme
    23 juin 2006 à 11:52:46

    Bonjour à tous :) ,
    Apres avoir lus les differents tutos présent sur le net (y compris celui présent sur ce site ), je pense avoir compris les jointures, et j'aimerais les appliqués sur mon forum.

    Explications :
    J'ai 2 tables :
    Categories
    id
    titre
    1 Projet

    et

    Forums
    id
    categorie
    titre
    description
    nombreSujets
    nombreReponses
    dernier_message
    auteur_dernier_mesage
    1 1 Les news Toutes les news sont ici ! 1 3 Ouverture du forum Hybrix


    J'ais donc essayé les jointures , ce qui donne :
    Forums
    id
    titre
    id
    categorie
    titre
    description
    nombreSujets
    nombreReponses
    dernier_message
    auteur_dernier_mesage
    1 Projet 1 1 Les news Toutes les news sont ici ! 1 3 Ouverture du forum Hybrix


    Ce qui donne en php :


    $retour = query("SELECT categories.id AS id_categories, categories.titre, forums.id AS id_forums, forums.categorie, forums.titre, forums.description FROM categories LEFT JOIN forums ON categories.id = forums.categorie");


    Mais cela ne donne aucun résultat :( :
    Le forum : ICI

    J'aimerais donc affiché pour chaque categories le forum étant dedans.
    Exemple : La catégorie projet contient le forum "Les news" car categorie est egal à l'id de la table catégories.

    Avant j'avais fait des requetes dans des boucles, ce qui donnais :

    //Recuperation des forums
    require("admin/identifiants.inc.php");
    mysql_connect($host, $ftp_pseudo, $ftp_code);
    mysql_select_db("forums");
    $retour_categories = query("SELECT * FROM categories ORDER BY id");

    //Affichage des categories
    while($categories = mysql_fetch_assoc($retour_categories))
    {
            $tpl -> set_var('numero_categorie', $categories['id']);
            $tpl -> set_var('titre_categorie', $categories['titre']);
            $retour_forums = query("SELECT * FROM forums WHERE categorie='".$categories['id']."' ORDER BY id"); /* Cette requete a enlever */

            //Affichage des forums
            while($forums  = mysql_fetch_assoc($retour_forums))
            {
                    $tpl -> set_var('numero_forum', $forums['id']);
                    $tpl -> set_var('titre', $forums['titre']);
                    $tpl -> set_var('description', $forums['description']);
                    $tpl -> set_var('nombre_sujets', $forums['nombreSujets']);
                    $tpl -> set_var('nombre_reponses', $forums['nombreReponses']);
                    $tpl -> set_var('dernier_message', $forums['dernier_message']);
                    $tpl -> set_var('auteur_dernier_message', $forums['auteur_dernier_message']);
                    $tpl -> set_var('nombre_requete', $nbquery);
                    $tpl -> parse("affichage_des_forums","AFFICHAGE_FORUMS",true);
            }
            $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true)
    }
    mysql_close();


    J'aimerais donc simplifier le code ci-dessus avec les jointures.
    Merci beaucoup à ceux qui seront répondre à mon problème.
    Hybrix
    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2006 à 12:15:29

      Parce que en jointures, le nom des colonnes doivent êtres differentes car sinon PHP ne sait pas quel "titre" selectionner :)
      • Partager sur Facebook
      • Partager sur Twitter

      Web Developer

        23 juin 2006 à 12:19:28

        je te conseille de dans la table catégorie, remplacer la colonne id par id_categ et dans la table forum, remplacer la colonne id par id_forum
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          23 juin 2006 à 12:52:11

          J'ai modifier le titre des categories ainsi que mon code php :

          $retour = query("SELECT         categories.id_categories, categories.titre, forums.id_forums, forums.categorie, forums.titre, forums.description
                                                                  FROM categories
                                                                  LEFT JOIN forums
                                                                  ON categories.id_categories = forums.categorie"
          );

          Mais aucune categories et forums ne s'affichent :(
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            23 juin 2006 à 12:59:14

            Essaie ca ;)

            $req = 'c.id_categories,c.titre,f.id_forum,f.categorie,f.titre,f.description FROM categories c LEFT JOIN forums f ON c.id_categories = f.categorie ORDER BY c.id_categorie, f.id_forum';
            $res = mysql_query($req);


            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              23 juin 2006 à 13:03:09

              Non , ça ne marche pas ,ça affiche l'erreur :
              "Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /mnt/112/sdc/d/d/sybrixmail/forum/forum.php on line 39".

              Mon problème ,c'est qu'apres avoir réussi à récuperer les infos je ne sais comment faire pour les affiché en boucle.
              Pour le moment j'ai cela :


              //Recuperation des forums
              require("admin/identifiants.inc.php");
              mysql_connect($host, $ftp_pseudo, $ftp_code);
              mysql_select_db("forums");
              $retour_categories = query("SELECT      categories.id_categories, categories.titre, forums.id_forums, forums.categorie, forums.titre, forums.description
                                                                      FROM categories
                                                                      LEFT JOIN forums
                                                                      ON categories.id_categories = forums.categorie"
              );

              //Affichage des categories et forums
              while($categories = mysql_fetch_assoc($retour_categories))
              {
                      $tpl -> set_var('numero_categorie', $categories['categories.id_categories']);
                      $tpl -> set_var('titre_categorie', $categories['categories.titre']);

                      $tpl -> set_var('numero_forum', $categories['forums.id']);
                      $tpl -> set_var('titre', $categories['forums.titre']);
                      $tpl -> set_var('description', $categories['forums.description']);
                      $tpl -> set_var('nombre_sujets', $categories['forums.nombreSujets']);
                      $tpl -> set_var('nombre_reponses', $categories['forums.nombreReponses']);
                      $tpl -> set_var('dernier_message', $categories['forums.dernier_message']);
                      $tpl -> set_var('auteur_dernier_message', $categories['forums.auteur_dernier_message']);
                      $tpl -> set_var('nombre_requete', $nbquery);
                      $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true)
              }
              mysql_close();
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                23 juin 2006 à 13:08:07

                Tu ne dois pas utiliser $categorie[nomtable.champs] pour utiliser les infos, tu dois utilise $categorie[champs] ;)
                De toute facon vu l'erreur ca vient de la requete
                Pourant elle à l'air correcte :/
                C'est quoi l'espace entre le select et le premier champs?
                Rajoute un mysql_error(), il devrait te donner une erreur plus précise
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  23 juin 2006 à 13:13:32

                  J'ai modifié le code ,et c'est déjà mieux,je me rapproche du but :
                  Voir ici

                  Le code :

                  //Recuperation des forums
                  require("admin/identifiants.inc.php");
                  mysql_connect($host, $ftp_pseudo, $ftp_code);
                  mysql_select_db("forums");
                  $retour_categories = query("SELECT categories.id_categories, categories.titre, forums.id_forums, forums.categorie, forums.titre, forums.description
                                                                          FROM categories
                                                                          LEFT JOIN forums
                                                                          ON categories.id_categories = forums.categorie"
                  );

                  //Affichage des categories et forums
                  while($categories = mysql_fetch_assoc($retour_categories))
                  {
                          $tpl -> set_var('numero_categorie', $categories['id_categories']);
                          $tpl -> set_var('titre_categorie', $categories['titre']);

                          $tpl -> set_var('numero_forum', $categories['id']);
                          $tpl -> set_var('titre', $categories['titre']);
                          $tpl -> set_var('description', $categories['description']);
                          $tpl -> set_var('nombre_sujets', $categories['nombreSujets']);
                          $tpl -> set_var('nombre_reponses', $categories['nombreReponses']);
                          $tpl -> set_var('dernier_message', $categories['dernier_message']);
                          $tpl -> set_var('auteur_dernier_message', $categories['auteur_dernier_message']);
                          $tpl -> set_var('nombre_requete', $nbquery);
                          $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true)
                  }
                  mysql_close();


                  ll y a une erreur , reglement devrait se trouvé dans la catégorie ou il y a les news.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    23 juin 2006 à 13:15:34

                    Bin l'erreur est très claire, il ne trouve pas categories.titre
                    Ce qui veut dire que le champ titre n'existe pas dans la table categories ou s'appelle différement
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      23 juin 2006 à 13:19:05

                      J'ai modifié, une partie du problème est résolu ^^ , mais reglement n'est pas dans la partie projet , il est dans projet ,mais le code à crée une deuxième catégorie, alors qu'il devrais être avec Les news.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        23 juin 2006 à 13:26:27

                        Ah, oui, logique, j'ai eu ce problème aussi ^^
                        pour enlever ca, dans ta boucle tu dois faire une condition
                        //Si la variable categorie[categorieencour] existe, alors on a afficher la categorie, on ne l'affiche plus
                        //Sinon, on l'affiche

                        Ce code doit fonctionner ;)
                        //Recuperation des forums
                        require("admin/identifiants.inc.php");
                        mysql_connect($host, $ftp_pseudo, $ftp_code);
                        mysql_select_db("forums");
                        $retour_categories = query("SELECT categories.id_categories, categories.titre, forums.id_forums, forums.categorie, forums.titre, forums.description
                                                                                FROM categories
                                                                                LEFT JOIN forums
                                                                                ON categories.id_categories = forums.categorie"
                        );

                        //Affichage des categories et forums
                        while($categories = mysql_fetch_assoc($retour_categories))
                        {
                                if(!isset($var_cat[$categorie['id_categories']]) {
                                    $tpl -> set_var('numero_categorie', $categories['id_categories']);
                                    $tpl -> set_var('titre_categorie', $categories['titre']);
                                                $var_cat[$categorie['id_catgeorie']] = true;
                                        }       

                                $tpl -> set_var('numero_forum', $categories['id']);
                                $tpl -> set_var('titre', $categories['titre']);
                                $tpl -> set_var('description', $categories['description']);
                                $tpl -> set_var('nombre_sujets', $categories['nombreSujets']);
                                $tpl -> set_var('nombre_reponses', $categories['nombreReponses']);
                                $tpl -> set_var('dernier_message', $categories['dernier_message']);
                                $tpl -> set_var('auteur_dernier_message', $categories['auteur_dernier_message']);
                                $tpl -> set_var('nombre_requete', $nbquery);
                                $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true);
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          23 juin 2006 à 13:41:10

                          J'ai modifié comme cela :

                          //Recuperation des forums
                          require("admin/identifiants.inc.php");
                          mysql_connect($host, $ftp_pseudo, $ftp_code);
                          mysql_select_db("forums");
                          $retour_categories = query("SELECT categories.id_categories, categories.titre_categories, forums.id_forums, forums.categorie, forums.titre, forums.description, forums.nombreSujets, forums.nombreReponses, forums.dernier_message, forums.auteur_dernier_message
                                                                                  FROM categories
                                                                                  LEFT JOIN forums
                                                                                  ON categories.id_categories = forums.categorie"
                          );

                          //Affichage des categories et forums
                          while($categories = mysql_fetch_assoc($retour_categories))
                          {
                                  if(!isset($var_cat[$categories['id_categories']]))
                                          {
                                      $tpl -> set_var('numero_categorie', $categories['id_categories']);
                                                  $tpl -> set_var('titre_categorie', $categories['titre_categories']);
                                      $var_cat[$categories['id_categories']] = true;
                                  }       

                                  $tpl -> set_var('numero_forum', $categories['id_forums']);
                                  $tpl -> set_var('titre', $categories['titre']);
                                  $tpl -> set_var('description', $categories['description']);
                                  $tpl -> set_var('nombre_sujets', $categories['nombreSujets']);
                                  $tpl -> set_var('nombre_reponses', $categories['nombreReponses']);
                                  $tpl -> set_var('dernier_message', $categories['dernier_message']);
                                  $tpl -> set_var('auteur_dernier_message', $categories['auteur_dernier_message']);
                                  $tpl -> set_var('nombre_requete', $nbquery);
                                  $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true)
                          }
                          mysql_close();


                          Mais rien n'a changé :euh:
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 juin 2006 à 17:51:05

                            Je suis malheureusement dans le même problème que Hybrix en ce moment :(
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Web Developer

                            Anonyme
                              24 juin 2006 à 13:32:03

                              Personne n'a d'idées ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 juin 2006 à 13:38:57

                                Quel est exactement le problème?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  24 juin 2006 à 13:41:26

                                  Les catégorie s'affiche à chaque forum
                                  J'ai déjà donné une méthode qui foncitonne, a vous de lamettre en place.

                                  //Si la variable $categorie[id] n'existe pas, la catégorie n'as pas encore été affichée, on l'affiche et on crée la variable $categorie[id]

                                  Avec id l'id de la catégorie

                                  Ainsi, après le premier tour de la boucle, la variable existe, on afiche pas la catégorie :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    24 juin 2006 à 14:46:34

                                    J'ai essayé et je me retrouve avec le meme resultat ici : Le forum


                                    //Affichage des categories et forums
                                    while($categories = mysql_fetch_assoc($retour_categories))
                                    {
                                            If(!isset($tableau[$categories['id_categories']]))
                                            {
                                                    $tpl -> set_var('numero_categorie', $categories['id_categories']);
                                                    $tpl -> set_var('titre_categorie', $categories['titre_categories']);
                                                    $tableau[$categories['id_categories']] = true;
                                            }

                                            $tpl -> set_var('numero_forum', $categories['id_forums']);
                                            $tpl -> set_var('titre', $categories['titre']);
                                            $tpl -> set_var('description', $categories['description']);
                                            $tpl -> set_var('nombre_sujets', $categories['nombreSujets']);
                                            $tpl -> set_var('nombre_reponses', $categories['nombreReponses']);
                                            $tpl -> set_var('dernier_message', $categories['dernier_message']);
                                            $tpl -> set_var('auteur_dernier_message', $categories['auteur_dernier_message']);
                                            $tpl -> set_var('nombre_requete', $nbquery);
                                            $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true)
                                    }
                                    mysql_close();


                                    Avec le code ci-dessus :(
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      24 juin 2006 à 16:42:20

                                      Bin en fait, c'est normal.
                                      Par contre ce qui n'est pas normal c'est que tu n'aies pas de notice d'undefined variable :/
                                      L'id de ta catégorie c'est bien numero_categorie, non?

                                      Si oui ce code devrais aller

                                      //Affichage des categories et forums
                                      while($categories = mysql_fetch_assoc($retour_categories))
                                      {
                                              If(!isset($tableau[$categories['numero_categorie']]))
                                              {
                                                      $tpl -> set_var('numero_categorie', $categories['id_categories']);
                                                      $tpl -> set_var('titre_categorie', $categories['titre_categories']);
                                                      $tableau[$categories['numero_categorie']] = true;
                                              }

                                              $tpl -> set_var('numero_forum', $categories['id_forums']);
                                              $tpl -> set_var('titre', $categories['titre']);
                                              $tpl -> set_var('description', $categories['description']);
                                              $tpl -> set_var('nombre_sujets', $categories['nombreSujets']);
                                              $tpl -> set_var('nombre_reponses', $categories['nombreReponses']);
                                              $tpl -> set_var('dernier_message', $categories['dernier_message']);
                                              $tpl -> set_var('auteur_dernier_message', $categories['auteur_dernier_message']);
                                              $tpl -> set_var('nombre_requete', $nbquery);
                                              $tpl -> parse("affichage_des_categories","AFFICHAGE_CATEGORIES",true);
                                      }
                                      mysql_close();

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 juin 2006 à 17:57:17

                                        Et avec un array_key_exists() ça serait pas mieux que isset() ? :euh:
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Web Developer

                                          24 juin 2006 à 18:09:55

                                          Citation : Yondaime


                                          Par contre ce qui n'est pas normal c'est que tu n'aies pas de notice d'undefined variable :/



                                          Il me semble que les Notices sont désactivé sur free
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            24 juin 2006 à 18:24:35

                                            J'ai testé ton bout de code ,et toujours rien, les catégories étaient tous appellées "Projet"
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            [Aide] Forums et Jointures

                                            × 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