Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bien ordrées les informations avec ma requête

    13 mars 2019 à 16:41:55

    Bonjour !
    Je galère depuis un bon moment sur une requête simple (je pense et je l'espère).
    j'ai une table category:
    Nom : Capture.PNG Affichages : 22 Taille : 12,1 Ko
    La colonne parent a une jointure avec l'id de la même table.
    Si la colonne est null cela veut dire que c'est une "catégorie parent" et si il y a un id c'est que c'est une sous catégorie de la catégorie parent.
    A la fin j'aimerai afficher un truc du style (faite comme si les lignes représentaient un tableau).
    Nom : Capture2.PNG Affichages : 21 Taille : 3,7 Ko

    J'ai fait ceci déjà mais je ne pense pas que c'est ce que j'ai besoin:
    SELECT 
        category_article.name
    FROM
        category_article
    		LEFT JOIN
    	category_article as CA on category_article.id = CA.parent
        

     
    Résultat de la requête:


    Merci d'avance de vos réponse !

    -
    Edité par Brice06 13 mars 2019 à 16:44:58

    • Partager sur Facebook
    • Partager sur Twitter

    Mon instagram: cebri_6

      13 mars 2019 à 17:02:58

      Avec cette requête tu peux afficher la liste des catégories ainsi que le parent pour chaque :

      SELECT
          c.name AS child,
          p.name AS parent
      FROM
          category_article c
              LEFT JOIN
          category_article p ON p.id = c.parent
      WHERE
          c.parent is not null

      Après si le parent peut lui même avoir un parent ça peut être plus compliqué. Genre vins rouges −> vins -> boissons alcoolisées -> boissons

      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2019 à 8:18:38

        Tout d'abord excuser moi de ma réponse tardive, j'étais malade.

        Il y a tout le temps trois niveau max. category parent -> category -> article (Boissons -> Minérales -> Coca-cola).

        Je suis d’accord avec votre requete mais maintenant ce que je cherche a faire c'est mettre dans le bonne ordre les informations.

        c'est à dire mettre les infos dans cette ordre:

        Boissons

        Minérales

        Vins

        Snacks

        Sucrés

        Salés

        Il faudrait que la catégorie parent soit tout en haut et que juste en dessous il y ait les catégorie de la catégorie parent. (une catégorie parent -> suivie de toutes ses catégories "enfant" | une catégorie parent -> suivie de toutes ses catégorie "enfant").

        J'espère avoir été assez clair.

        Merci d'avance !!

        • Partager sur Facebook
        • Partager sur Twitter

        Mon instagram: cebri_6

          20 mars 2019 à 9:44:16

          Bonjour,

          Quelle version de MySQL utilises-tu ? Si > 8 alors il existe la fonctionnalité WITH RECURSIVE qui pourra t'aider ;)

          Si < 8, alors il faudra te débrouiller avec les jointures, ORDER BY, et une boucle côté code applicatif.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            20 mars 2019 à 10:52:20

            Je suis en 5.7.25... Mais du coup si je fais un simple select du name de la table category, je récupère deja tout les name et ensuite je fais des jointure et des boucles et ça devrait le faire?
            • Partager sur Facebook
            • Partager sur Twitter

            Mon instagram: cebri_6

              20 mars 2019 à 11:10:13

              Avec quel langage de programmation travailles-tu ?

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                20 mars 2019 à 11:22:47

                Je bosse en php
                • Partager sur Facebook
                • Partager sur Twitter

                Mon instagram: cebri_6

                  20 mars 2019 à 12:20:41

                  Si le nombre de catégories dans les deux premiers niveaux n'est pas trop important (moins de 50), je pense que le plus simple c'est de faire ta récursivité en PHP :

                  <?php
                  	$bdd = new PDO( ... );
                  	
                  	function listeCategories( $parent = false ) {
                  		
                  		if( $parent ) {
                  			$requete = $bdd->prepare( 'SELECT id, name FROM categorie WHERE parent = ? ORDER BY name' );
                  			$requete->execute( array( $parent ) );
                  		} else {
                  			$requete = $bdd->query( 'SELECT id, name FROM categorie WHERE parent IS NULL ORDER BY name' );
                  		}
                  		$categories = $requete->fetchAll();
                  		
                  		if( count( $categorie ) ) {
                  			echo '<ul>';
                  			foreach( $categories as $categorie ) {
                  				echo '<li><a href="categorie.php?id='.$categorie->id.'">'.$categorie->name.'</a></li>';
                  				listeCategories( $categorie->id );
                  			}
                  			echo '</ul>'
                  		}
                  	}
                  	
                  	listeCategories();
                  ?>

                  De cette manière, tu vas balayer tout ton arbre dans l'ordre et avec une organisation <ul><li> structurée.

                  Par contre cela va lancer potentiellement une requête par niveau parent, donc à éviter si ce nombre est élevé (plus de 50 à vu de nez).

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    23 mars 2019 à 9:45:14

                    Ok merci je vais essayer ça!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Mon instagram: cebri_6

                    Bien ordrées les informations avec ma requête

                    × 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