Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Jointure] Grouper

Sujet résolu
    31 août 2006 à 0:05:05

    Bonsoir.


    Structure de la table `myptr_template_subm` ;



    CREATE TABLE `myptr_template_subm` (
      `nom` varchar(255) NOT NULL DEFAULT '',
      `lien` varchar(255) NOT NULL DEFAULT '',
      `useraccount` int(1) NOT NULL DEFAULT '0',
      `id` int(11) NOT NULL DEFAULT '0'
    ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

    INSERT INTO `myptr_template_subm` VALUES ('Accueil', 'index.php', 0, 1);
    INSERT INTO `myptr_template_subm` VALUES ('Nouveautés', 'news.php', 0, 1);


    Et myptr_template_bigm :



    CREATE TABLE `myptr_template_bigm` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `nom` varchar(255) NOT NULL DEFAULT '',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


    INSERT INTO `myptr_template_bigm` VALUES (1, 'Kooza');


    Bon voici mon code :


    $requete = "SELECT
    bigm.nom AS BigNom, bigm.id, subm.id, subm.lien AS link, subm.nom AS nom2, subm.useraccount
    FROM
    "
    . PREFIX . "template_bigm bigm
    LEFT JOIN
    "
    . PREFIX ."template_subm subm ON subm.id = bigm.id
    WHERE "
    ;

    if (isset($_SESSION['logged']) && $_SESSION['logged'] == TRUE)
    {
     $requete .= "usercaccount = 1";
    }
    else
    {
     $requete .= "useraccount = 0";
    }

    $requete = mysql_query($requete) or die(mysql_error());
    while ($x = mysql_fetch_assoc($requete))
    {
     $template->assign_block_vars('menu', array(
     'BIG_MENU' => $x['BigNom'],
     'NOM_LIEN' => $x['nom2'],
     'URL_LIEN' => $x['link']
     ));
    }


    Le but du script est de joindre la catégorie parent (champ ID à joindre) pour afficher :


    --> BigNom <--
    * Cat1
    * Cat2
    * Cat3664

    --> Autre BigNom <--
    * Cat45
    * Cat9


    Résultat obtenue :


    --> Kooza <--
    * Accueil

    --> Kooza <--
    * Nouveautés


    Résultat voulue :


    --> Kooza <--
    * Accueil
    * Nouveautés


    J'arrive pas à trouver le bug de la jointure, enfin faudrais sûrement grouper par 'GROUP BY' mais si je met un GROUP BY sur bigm.nom ca me renvoie seulement 'Accueil'.

    Merci ;) .
    • Partager sur Facebook
    • Partager sur Twitter
      31 août 2006 à 0:12:16

      Tu dois faire une boucle en gardant l'id ou le nom du BigNom. Si celui-ci change, bah tu l'affiches.

      En pseudo-code :

      $big_nom_precedent = null;
      while(recuperer_donnees()) {
        if ($big_nom != $big_nom_precedent) {
          echo '--> big_menu <--';
          $big_nom_precedent = $big_menu;
        }
        echo 'sous-menu avec le lien';
      }


      Si t'as l'id c'est mieux, car les nombres sont comparés plus vites ('spice de fada de l'optimisation).
      • Partager sur Facebook
      • Partager sur Twitter
        31 août 2006 à 0:18:23

        Citation : savageman

        Tu dois faire une boucle en gardant l'id ou le nom du BigNom. Si celui-ci change, bah tu l'affiches.

        En pseudo-code :

        $big_nom_precedent = null;
        while(recuperer_donnees()) {
          if ($big_nom != $big_nom_precedent) {
            echo '--> big_menu <--';
            $big_nom_precedent = $big_menu;
          }
          echo 'sous-menu avec le lien';
        }



        Si t'as l'id c'est mieux, car les nombres sont comparés plus vites ('spice de fada de l'optimisation).



        Le pb c'est que si je fais ca, ca m'affiche plus BigNom en 'Rendue Template' (ca l'affiche brut).

        Je recherche donc une solution outre ca :( (car déjas ca marche pas, ca m'affiche un blanc : p).
        • Partager sur Facebook
        • Partager sur Twitter
          31 août 2006 à 0:19:43

          Bah tu dois adapter avec ton truc de template, mais ca doit pas être difficile... Tu gères comment tes templates ?
          • Partager sur Facebook
          • Partager sur Twitter
            31 août 2006 à 0:36:45

            La class template de phpBB ^^.

            Mon tpl file :

            <!-- START menu -->
            <h1>{menu.BIG_MENU}</h1>
            &middot;&nbsp;<a href="{menu.URL_LIEN}">{menu.NOM_LIEN}</a><br />
            <!-- END menu -->
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              31 août 2006 à 0:59:03

              Tu peux pas le faire ainsi.
              Tu dois rajouter un block :)

              <!-- START menu -->
              <h1>{menu.BIG_MENU}</h1>
              <!-- START menu.det -->
              &middot;&nbsp;<a href="{menu.URL_LIEN}">{menu.NOM_LIEN}</a>
              <!-- END menu.det --><br />
              <!-- END menu -->
              ( je sais pas si la gestion des sous-bloc se fais comme ca sous le truc de phpbb )

              Ainsi, tu utilises la méthode de savageman, et si c'est un big menu, tu parses le big menu, sinon tu met le sous-menu dans la liste des sous-menu du bloc.

              Je parie que personne à rien compris :lol:
              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2006 à 1:05:14

                Oui, j'ai rien compris Oo ^^
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  31 août 2006 à 1:19:08

                  Bah c'est simple en fait, c'est moi qui explique comme une brêle :D

                  On le refait ^^'

                  avec ton template, tu as un bloc qui contient le nom du big menu et un lien du menu

                  Le problème, c'est qu'avec ca, tu affichera toujours le big menu et le lien du menu.

                  pour éviter ca, il faut mettre le lien dans un sous-bloc.
                  Ainsi, quand on fais un tour de boucle, c'ets facile à gerer.
                  Si le bloc qui contient le big_menu existe déjà, on a déjà afficher le nom du big_menu, on ajoute le lien du menu dans la liste des lien de menu
                  S'il n'existe pas, on crée le bloc, et on crée le sous-bloc.
                  Ainsi pas de soucis, tout s'affiche comme ilf aut ;)

                  ton tpl ressemblerais à un truc comme ca:
                  <!-- BEGIN bloc -->
                  <strong>{bloc.big_m}</strong>
                  <br />
                  <!-- BEGIN bloc.sb -->
                  <a href="{bloc.sb.url}">{bloc.sb.alias}</a>
                  <br />
                  <!-- END bloc.sb -->
                  <!-- END bloc';

                  J'ai pas de moteur de template additionnel ( encore moins celui de PhpBB :D ) pour te faire une ébauche de code, donc faudra essayer de trifouiller un peu
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Jointure] Grouper

                  × 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