Partage
  • Partager sur Facebook
  • Partager sur Twitter

order by classé en fonction du plus grand

Sujet résolu
    30 novembre 2020 à 17:15:56

    bonjour

    j'ai une table avec 2 colonnes categ et sous_categ, il peut avoir plusieurs fois la même info dans categ et sous.

    Je voudrais classé par categ avec celui qui a le plus de sous_categ au moins.

    je ne voie pas comment faire.

    	$recp_categ = $bdd->query("SELECT DISTINCT categ FROM categorie where id != 1  ORDER BY sous_categ DESC");
    	while ($recp_catego = $recp_categ->fetch())
    	{
    	$categnom = $recp_catego['categ']; 
      echo "<h3>".substr($categnom, 0, 40)."</h3><ul>";
      	$recp_categ2 = $bdd->query("SELECT * FROM categorie where id != 1 AND categ = '$categnom' ORDER BY sous_categ");
    	while ($recp_scateg2 = $recp_categ2->fetch())
    	{
    	$socateg = $recp_scateg2['sous_categ'];
      echo '<li><a href="Recherche-Astuce-Tuto&categorie='.$categnom.'&socategorie='.$socateg.'">'.substr($socateg, 0, 34).'</a></li>';
      }



    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2020 à 8:58:22

      Hello,

      Tu devrais aller plus dans la catégorie SQL.

      Après, essaye un truc du genre (même si je suis pas le plus fort en SQL):

      SELECT DISTINCT c.categ
      FROM categorie AS c
      INNER JOIN categorie AS subc ON subc.categ = c.categ
      WHERE c.id != 1
      ORDER BY COUNT(subc.sous_categ) DESC



      • Partager sur Facebook
      • Partager sur Twitter
      $2b||!$2b
        2 décembre 2020 à 9:13:04

        Bonjour,

        Déplacement vers un forum plus approprié

        Le sujet est déplacé de la section PHP vers la section Base de données

        • Partager sur Facebook
        • Partager sur Twitter

        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          2 décembre 2020 à 9:30:35

          Bonjour,

          Peux-tu nous expliquer un peu plus précisément ce que tu cherches à faire ?

          Nous donner aussi le modèle des tables en question (colonnes, types, clés).

          Par ailleurs je soupçonne un problème de conception si tu fais la jointure entre la catégorie et la sous-catégorie par le nom et non par l'id ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            2 décembre 2020 à 11:36:03

            hello

            merci pour vos réponses.

            skuti, oui je pense que ça doit être avec modif SQL mais je suis pas a ton niveau, la j'ai rien compris ton code et me marque erreur:

            Fatal error: Uncaught Error: Call to a member function fetch() on bool

                        <div class="col_7">
                            <h2>Rechercher selon les Catégories</h2>
                        </div>
            	<?php $num = 1; ?>		
                <div class="col_1">
               <?php 
              $recp_categ = $bdd->query("SELECT DISTINCT c.categ
            FROM categorie AS c
            INNER JOIN categorie AS subc ON subc.categ = c.categ
            WHERE c.id != 1
            ORDER BY COUNT(subc.sous_categ) DESC");
            
            
            	//$recp_categ = $bdd->query("SELECT DISTINCT categ FROM categorie where id != 1  ORDER BY sous_categ DESC");
            	while ($recp_catego = $recp_categ->fetch())
            	{
            	$categnom = $recp_catego['categ']; 
              echo "<h3>".substr($categnom, 0, 40)."</h3><ul>";
              	$recp_categ2 = $bdd->query("SELECT * FROM categorie where id != 1 AND categ = '$categnom' ORDER BY sous_categ");
            	while ($recp_scateg2 = $recp_categ2->fetch())
            	{
            	$socateg = $recp_scateg2['sous_categ'];
              echo '<li><a href="Recherche-Astuce-Tuto&categorie='.$categnom.'&socategorie='.$socateg.'">'.substr($socateg, 0, 34).'</a></li>';
              }
             if ( $num == 1) 
              {
              echo "</div> <div class='col_1'>"; 
              $num = 0;
              }
              $num++;
             }
            </div><!-- End 5 columns container -->
            </li><!-- End 5 columns Item -->

            ma table:



            actuellement c'est comme ça mais je voudrais classé de la catégorie qui a le plus de sous catégorie pour ne pas avoir du vide comme maintenant

            -
            Edité par maxtrident 2 décembre 2020 à 15:02:33

            • Partager sur Facebook
            • Partager sur Twitter
              2 décembre 2020 à 12:09:08

              Bonjour, 

              Si tu as la categorie et la sous-categorie dans la même table tu n'a pas besoin de faire de jointure : 

              Utilise juste GROUP BY a la place de DISTINCT et un COUNT dans ton ORDER BY

              Puis pour trouver le nombre de sous categorie compte plutot le nombre de même categorie que tu as dans ta table

              Il faut aussi SELECT sous_categ pour l'afficher 

              SELECT categ, sous_categ FROM categorie where id != 1 GROUP BY categ ORDER BY COUNT(categ) DESC

              EDIT : j'avais pas fait attention au code PHP

              (j'ai l'impression que je m'y ferait jamais au code php par rapport à du VB ou C# 😅😅)

              Regarde la réponse de Benzouye pour éviter des lourdeurs. 

              -
              Edité par DeveloSt 2 décembre 2020 à 13:12:05

              • Partager sur Facebook
              • Partager sur Twitter

              Site Internet : https://devst.go.yj.fr

                2 décembre 2020 à 12:45:08

                Je vais répondre en deux temps. D'abord pour faire fonctionner ton modèle existant, puis en corrigeant ton modèle pour qu'il soit plus propre.

                Donc, avec ton modèle actuel, je te propose de fonctionner avec cette requête :

                SELECT
                	C.categ,
                	C.sous_categ
                FROM
                	categorie C
                		INNER JOIN (
                				-- Nombre de sous-catégories par catégorie
                				SELECT categ, COUNT(*) AS nb_sous_categ
                				FROM categorie
                				WHERE id != 1
                				GROUP BY categ
                			) N
                			ON C.categ = N.categ
                ORDER BY
                	N.nb_sous_categ DESC,
                	C.sous_categ ASC

                Il y a une sous-requête qui compte le nombre de sous-catégories par catégorie, et qui nous permet de trier le résultat global.

                Il faut retirer ces histoires de boucles imbriquées, qui sont lentes et peuvent même planter le serveur si beaucoup de catégories à traiter.

                Côté PHP cela donnerait :

                			<div class="col_7">
                				<h2>Rechercher selon les Catégories</h2>
                			</div>
                			<div class="col_1">
                <?php
                	$premiereLigne = true;
                	$categoriePrecedente = '';
                	$requete = $bdd->query('
                		SELECT
                			C.categ,
                			C.sous_categ
                		FROM
                			categorie C
                				INNER JOIN (
                						-- Nombre de sous-catégories par catégorie
                						SELECT categ, COUNT(*) AS nb_sous_categ
                						FROM categorie
                						WHERE id != 1
                						GROUP BY categ
                					) N
                					ON C.categ = N.categ
                		ORDER BY
                			N.nb_sous_categ DESC,
                			C.sous_categ ASC'
                	);
                	$elements = $requete->fetchAll();
                	
                	foreach( $elements as $element ) {
                		// Si c'est une catégorie non encore traitée
                		if( $categoriePrecedente != $element['categ'] ) {
                			// Si ce n'est pas la première ligne
                			if( !$premiereLigne ) {
                				// On ferme le ul précédent
                ?>
                				</ul>
                <?php
                			}
                			// On affiche le titre de la catégorie
                ?>
                				<h3><?= $element['categ']; ?></h3>
                				<ul>
                <?php
                		}
                		// Dans tous les cas on affiche la sous-catégorie
                ?>
                					<li><a href="Recherche-Astuce-Tuto&categorie=<?= $element['categ']; ?>&socategorie=<?= $element['sous_categ']; ?>"></a></li>
                <?php	
                		$premiereLigne = false;
                		$categoriePrecedente = $element['categ'];
                	}
                ?>
                				</ul>
                			</div>

                Maintenant, ton modèle n'est pas propre du tout ... tu devrais le changer.

                Une solution simple, avec deux tables :

                • categorie ( id [pk], libelle )
                • scategorie ( id [pk], id_categorie [fk], libelle )

                La requête pour générer le menu devient :

                SELECT
                	C.id AS idc,
                	C.libelle AS categ,
                	SC.id AS idsc,
                	SC.libelle AS sous_categ
                FROM
                	categorie C
                		INNER JOIN scategorie SC
                			ON C.id = SC.id_categorie
                		INNER JOIN (
                				-- Nombre de sous-catégories par catégorie
                				SELECT id, COUNT(*) AS nb_sous_categ
                				FROM categorie
                				GROUP BY id
                			) N
                			ON C.id = N.id
                ORDER BY
                	N.nb_sous_categ DESC,
                	SC.libelle ASC

                Et le code PHP est identique. Sauf que tu peux passer les id au lieu des noms dans le lien <a>.

                Une autre solution plus subtile avec une auto référence sur une seule table :

                • categorie( id [pk], id_parent [fk], libelle )

                La requête serait :

                SELECT
                	C.id AS idc,
                	C.libelle AS categ,
                	SC.id AS idsc,
                	SC.libelle AS sous_categ
                FROM
                	categorie C
                		INNER JOIN categorie SC
                			ON C.id = SC.id_parent
                		INNER JOIN (
                				-- Nombre de sous-catégories par catégorie
                				SELECT id_parent, COUNT(*) AS nb_sous_categ
                				FROM categorie
                				WHERE id_parent IS NOT NULL
                				GROUP BY id_parent
                			) N
                			ON C.id = N.id
                ORDER BY
                	N.nb_sous_categ DESC,
                	SC.libelle ASC

                -
                Edité par Benzouye 2 décembre 2020 à 13:10:53

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  2 décembre 2020 à 12:49:59

                  super merci...ouah, je ne savais pas qu'on pouvait faire tous ça en sql...

                  je vais essayer de comprendre tous ça...  ajoute C. devant categ, sous_categ... ça permet de regrouper, c'est bien ça ?

                  j'ai pris ton code mais n'affiche pas les sous categ...

                  je n'ai pas pris ton code avec les id car j'ai besoin des noms pour l'url

                  les <ul> sont uniquement sur le menu départ et fin pour séparer les catégories je met ça

                   if ( $num == 1)
                    {
                    echo "</div> <div class='col_1'>";
                    $num = 0;
                    }
                    $num++;

                  -
                  Edité par maxtrident 2 décembre 2020 à 15:10:09

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 décembre 2020 à 11:44:53

                    Benzouye j’essaie de modifier le script avec auto référence sur une seule table.

                    mais ça ne fonctionne pas, me dit qu'il ne trouve pas id_parent

                    	 <li><a href="Recherche-Astuce-Tuto" class="drop">Rechercher</a><!-- Begin 5 columns Item -->
                        
                            <div class="dropdown_6columns"><!-- Begin 5 columns container -->
                            
                                <div class="col_7">
                                    <h2>Rechercher selon les Catégories</h2>
                                </div>
                    	<?php $num = 1; ?>		
                        <div class="col_1">
                       <?php 
                      
                        $premiereLigne = true;
                        $categoriePrecedente = '';
                        $requete = $bdd->query('
                            SELECT
                        C.id AS idc,
                        C.libelle AS categ,
                        SC.id AS idsc,
                        SC.libelle AS sous_categ
                    FROM
                        categorie C
                            INNER JOIN categorie SC
                                ON C.id = SC.id_parent
                            INNER JOIN (
                                    -- Nombre de sous-catégories par catégorie
                                    SELECT id_parent, COUNT(*) AS nb_sous_categ
                                    FROM categorie
                                    WHERE id_parent IS NOT NULL
                                    GROUP BY id_parent
                                ) N
                                ON C.id = N.id
                    ORDER BY
                        N.nb_sous_categ DESC,
                        SC.libelle ASC
                        ');
                        $elements = $requete->fetchAll();
                         
                        foreach( $elements as $element ) {
                            // Si c'est une catégorie non encore traitée
                            if( $categoriePrecedente != $element['categ'] ) {
                            // Si ce n'est pas la première ligne
                                if( !$premiereLigne ) {
                                    // On ferme le ul précédent
                            echo "</div> <div class='col_1'>"; 
                    			}
                      $categnom = $element['categ']; 
                        echo "<h3>".substr($categnom, 0, 40)."</h3><ul>";
                      
                    		}
                    		$socateg = $element['sous_categ'];
                    
                    
                    //Remplacement de caractère pour la réécriture du l'url htaccess
                    $aid = $element['id'];
                    $info = $element['titre_astuce'];
                    $info = htmlspecialchars($info); ?> <form method="POST" class="voirast" action="Voir_Astuce-<?php echo $aid;?>/<?php echo $info;?>"> <INPUT type="hidden" name="idanon" value="<? echo $aid;?>" /> </form> <?php echo '<li><a "onclick"="document.voirast.submit();">'.substr($socateg, 0, 34).'</a></li>'; $premiereLigne = false; $categoriePrecedente = $element['categ']; } ?> </div><!-- End 5 columns container --> </li><!-- End 5 columns Item -->


                    ps: désolé mais j'arrive pas a mettre tous le script open me bloc la page

                    -
                    Edité par maxtrident 22 décembre 2020 à 11:52:27

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 décembre 2020 à 11:08:14

                      maxtrident a écrit:

                      ça ne fonctionne pas, me dit qu'il ne trouve pas id_parent

                      C'est une erreur PDO ? PHP ?

                      As-tu ajouté cette colonne dans la table en question ?

                      Ma proposition était :

                      Benzouye a écrit:

                      Une autre solution plus subtile avec une auto référence sur une seule table :

                      • categorie( id [pk], id_parent [fk], libelle )
                      • 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 décembre 2020 à 12:31:43

                        je comprend, j'ai ajouté:

                        sur le tous 1er code ça fonctionner mais affiche plusieurs fois la même catégorie.

                        avec le code:

                        	 <li><a href="Recherche-Astuce-Tuto" class="drop">Rechercher</a><!-- Begin 5 columns Item -->
                            
                                <div class="dropdown_6columns"><!-- Begin 5 columns container -->
                                
                                    <div class="col_7">
                                        <h2>Rechercher selon les Catégories</h2>
                                    </div>
                        	<?php $num = 1; ?>		
                            <div class="col_1">
                           <?php 
                          
                            $premiereLigne = true;
                            $categoriePrecedente = '';
                            $requete = $bdd->query('
                        SELECT
                            C.id AS idc,
                            C.libelle AS categ,
                            SC.id AS idsc,
                            SC.libelle AS sous_categ
                        FROM
                            categorie C
                                INNER JOIN categorie SC
                                    ON C.id = SC.id_parent
                                INNER JOIN (
                                        -- Nombre de sous-catégories par catégorie
                                        SELECT id_parent, COUNT(*) AS nb_sous_categ
                                        FROM categorie
                                        WHERE id_parent IS NOT NULL
                                        GROUP BY id_parent
                                    ) N
                                    ON C.id = N.id
                        ORDER BY
                            N.nb_sous_categ DESC,
                            SC.libelle ASC
                            ');
                            $elements = $requete->fetchAll();
                             
                            foreach( $elements as $element ) {
                                // Si c'est une catégorie non encore traitée
                                if( $categoriePrecedente != $element['categ'] ) {
                                // Si ce n'est pas la première ligne
                                    if( !$premiereLigne ) {
                                        // On ferme le ul précédent
                                echo "</div> <div class='col_1'>"; 
                        			}
                          $categnom = $element['categ']; 
                            echo "<h3>".substr($categnom, 0, 40)."</h3><ul>";
                          
                        		}
                        		$socateg = $element['sous_categ'];
                        		$idcateg = $element['id'];
                        
                        //Remplacement de caractère pour la réécriture du l'url htaccess
                        $info = $socateg;
                        $info = htmlspecialchars($info);
                        $info = ucfirst($info);
                        $info= strtr(utf8_decode($info), utf8_decode("àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ"), utf8_decode("aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY"));
                        $info = strtolower($info); 
                        $info = str_replace("l'", "", $info);
                        $info = str_replace("j'", "", $info);
                        $info = str_replace("d'", "", $info);
                        $info = str_replace("t'", "", $info);
                        $info = str_replace(" les ", " ", $info);
                        $info = str_replace(" des ", " ", $info);
                        $info = str_replace(" la ", " ", $info);
                        $info = str_replace(" le ", " ", $info);
                        $info = str_replace(" de ", " ", $info);
                        $info = str_replace(" a ", " ", $info);
                        $info = str_replace(" une ", " ", $info);
                        $info = str_replace(" un ", " ", $info);
                        $info = str_replace(" pour ", " ", $info);
                        $info = str_replace(" sur ", " ", $info);
                        $info = str_replace(" dans ", " ", $info);
                        $info = str_replace(" - ", " ", $info);
                        $info = str_replace(" ", "-", $info);
                        $info = str_replace("  ", "-", $info);
                        $info = str_replace(" !", " ", $info);
                        ?>
                        
                        
                        <li><a href="Recherche-Astuce-Tuto-<?php echo $idcateg;?>/<?php echo $info;?>" ><?php echo substr($socateg, 0, 34); ?></a>
                        <?php
                            $premiereLigne = false;
                            $categoriePrecedente = $element['categ'];
                        $num++;	
                        	}
                         ?>
                                
                           </div><!-- End 5 columns container -->
                           </li><!-- End 5 columns Item -->



                        J'ai comme erreur Column not found: 1054 Champ 'N.id' inconnu dans on clause

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 décembre 2020 à 12:38:42

                          maxtrident a écrit:

                          J'ai comme erreur Column not found: 1054 Champ 'N.id' inconnu dans on clause

                          Oui, c'est une erreur de ma part ... Ligne 31 dans le code ci-dessus, c'est :

                          ON C.id = N.id_parent
                          • 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 décembre 2020 à 13:50:42

                            je n'ai plus d'erreur mais ça n'affiche rien pas de catégorie, ni les sous.

                            l'ajout des 2 colonnes  id_parent [fk], libelle....[pk] et [fk], c'est quoi ?...je dois faire quelque chose dans la table ?

                            Peut etre la raison que ça fonctionne pas.

                            si tu peut m'expliquer a quoi sert l'ajout des 2 colonnes ? ça joue le rôle d'une mémoire...

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 décembre 2020 à 14:44:18

                              Je n'ai pas ajouté 2 colonnes ... J'ai revu complètement la table ... Je pense que la lecture du cours MySQL peut s'avérer très utile (cf. ma signature).

                              Dans ma proposition il n'y a qu'une seule table avec 3 colonnes :

                              • id, qui est l'identifiant unique de la catégorie, un entier auto incrémenté et clé primaire (ou primary key en anglais)
                              • id_parent, qui est un entier, et doit contenir l'id de la catégorie parente pour une sous-catégorie, ou null si c'est une catégorie, c'est une clé étrangère (ou foreign key en anglais)
                              • libelle, qui est du texte et contient le libellé de la catégorie (si id_parent est null) ou de la sous-catégorie (si id_parent est défini)

                              En SQL cela donne :

                              CREATE TABLE categorie (
                                  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                  id_parent INT UNSIGNED,
                                  libelle VARCHAR(60) NOT NULL,
                                  FOREIGN KEY ( id_parent ) REFERENCES categorie ( id )
                              ) Engine=InnoDB;

                              Ensuite cette table va contenir des données, par exemple :

                              -- Création catégories
                              INSERT INTO categorie ( id, id_parent, libelle ) VALUES
                              ( 1, NULL, 'Santé' ),
                              ( 2, NULL, 'Cuisine' ),
                              ( 3, NULL, 'Voyage' );
                              
                              -- Création sous-catégories
                              INSERT INTO categorie ( id, id_parent, libelle ) VALUES
                              ( 4, 1, 'Bobos' ),
                              ( 5, 1, 'Douleurs' ),
                              ( 6, 1, 'Piqûres' ),
                              ( 7, 2, 'Astuces' ),
                              ( 8, 2, 'Dessert' ),
                              ( 9, 3, 'Avion' );

                              Il faut également que tes éléments "astuces" reprennent bien l'id cette table pour les catégoriser ...

                              • 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 décembre 2020 à 16:35:53

                                ha ok, merci pour les explications.

                                ça va être super compliquer à tous modifier comme libelle à les catégories et sous-categories et des id différents,  je vais essayer de faire à ta manière par la suite.

                                par contre comprend pas pour la création des sous catégorie comment savoir que par exemple "dessert" et dans id_parent 2 soit cuisine ?

                                comment faire pour ne pas afficher des catégories en double avec ton script :

                                SELECT
                                    C.categ,
                                    C.sous_categ
                                FROM
                                    categorie C
                                        INNER JOIN (
                                                -- Nombre de sous-catégories par catégorie
                                                SELECT categ, COUNT(*) AS nb_sous_categ
                                                FROM categorie
                                                WHERE id != 1
                                                GROUP BY categ
                                            ) N
                                            ON C.categ = N.categ
                                ORDER BY
                                    N.nb_sous_categ DESC,
                                    C.sous_categ ASC



                                -
                                Edité par maxtrident 23 décembre 2020 à 16:36:08

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 décembre 2020 à 16:54:33

                                  maxtrident a écrit:

                                  comment savoir que par exemple "dessert" et dans id_parent 2 soit cuisine

                                  Quand tu crées une sous-catégorie, tu mets une liste déroulante des catégories existantes avec leur id ...

                                  SELECT id, libelle
                                  FROM categorie
                                  WHERE id_parent IS NULL

                                  L'utilisateur choisi dans cette liste et défini donc l'id_parent ...

                                  maxtrident a écrit:

                                  ça va être super compliquer à tous modifier comme libelle à les catégories et sous-categories et des id différents

                                  Oui, cela demande un effort de transposition ... Mais tu peux faire un enchaînement "automatique" pour tout mettre d'aplomb :

                                  -- Création des catégories
                                  INSERT INTO categorie ( id_parent, libelle )
                                  	SELECT DISTINCT NULL, categ
                                  	FROM categ
                                  	ORDER BY categ;
                                  
                                  -- Création des sous-catégories
                                  INSERT INTO categorie ( id_parent, libelle )
                                  	SELECT
                                  		N.id,
                                  		O.sous_categ
                                  	FROM
                                  		categ O
                                  			INNER JOIN categorie N
                                  				ON O.categ = N.libelle;
                                  
                                  -- Mise à jour des astuces
                                  UPDATE astuces A
                                  	INNER JOIN categ O
                                  		ON A.id_categorie = O.id
                                  	INNER JOIN categorie N
                                  		ON O.sous_categ = N.libelle
                                  SET A.id_categorie = N.id;

                                  J'ai imaginé que tu avais une table astuces avec une colonne id_categorie, mais cela doit être adapté à ton vrai modèle ...

                                  maxtrident a écrit:

                                  comment faire pour ne pas afficher des catégories en double avec ton script 

                                  Mon script ne devrait pas afficher de doublon, cela signifie qu'il doit y avoir des libellés de catégorie différents, genre avec un simple espace devant ou derrière le libellé. Par exemple, regarde si il n'y a pas un espace dans "Voyage / Avion" ...

                                  • 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 décembre 2020 à 17:33:24

                                    non je n'ai pas d'espace par contre j'ai remarqué que si c'est à la suite ça remet la categorie exemple logiciel

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 décembre 2020 à 9:02:33

                                      Peux-tu me confirmer ce que retourne cette requête :

                                      -- Nombre de sous-catégories par catégorie
                                      SELECT categ, COUNT(*) AS nb_sous_categ
                                      FROM categorie
                                      WHERE id != 1
                                      GROUP BY categ

                                      Et celle-ci :

                                      SELECT
                                      	C.categ,
                                      	C.sous_categ,
                                      	N.nb_sous_categ
                                      FROM
                                      	categorie C
                                      		INNER JOIN (
                                      				-- Nombre de sous-catégories par catégorie
                                      				SELECT categ, COUNT(*) AS nb_sous_categ
                                      				FROM categorie
                                      				WHERE id != 1
                                      				GROUP BY categ
                                      			) N
                                      			ON C.categ = N.categ
                                      ORDER BY
                                      	N.nb_sous_categ DESC,
                                      	C.sous_categ ASC
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                        24 décembre 2020 à 11:45:57

                                        j'ai du ajouté pour ton 1er script id et sous_categ

                                        SELECT id, sous_categ, categ, COUNT(*) AS nb_sous_categ
                                        FROM categorie
                                        WHERE id != 1
                                        GROUP BY categ

                                        pour la 2eme requete avec ajout id

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          24 décembre 2020 à 22:45:31

                                          Cela ne peut pas fonctionner si tu ajoutes id dans le SELECT ... puisque tu as des id différents pour une même catégorie...

                                          Exécute les requêtes proposées directement dans MySQL (ou via PHPMyAdmin par exemple) pour comprendre ce qui se passe...

                                          Il est grand temps de te former au SQL ...

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                            25 décembre 2020 à 11:18:08

                                            oui je devrais revoir le sql mais vraiment pas motivé, surtout par maque de temps et beaucoup d'autres projets avec arduino, apprendre d'autres langages pour androide...

                                            j'avais appris le php quand c’était le site du zéro, ça date maintenant.

                                            requête 1

                                            requête 2

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 décembre 2020 à 23:15:13

                                              Il faut juste changer la clause ORDER BY pour y ajouter la catégorie... je n'y avais pas pensé...

                                              ORDER BY

                                                  N.nb_sous_categ DESC,

                                                  C.categ ASC,

                                                  C.sous_categ ASC

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                                27 décembre 2020 à 11:24:27

                                                merci...en plus c'est super rapide.

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  30 décembre 2020 à 17:42:20

                                                  je voudrais savoir si je peut optimiser mon script car il est sur toutes mes pages en header et doit ralentir le site

                                                    // Récupération de des codes banières
                                                    $publist = $bdd->query("SELECT * FROM rc_headerpub2 WHERE statut = 'active' ORDER BY rand(), display_today asc LIMIT 1");
                                                   if ($pubid = $publist->fetch())
                                                  {
                                                    $pub = array();
                                                    $pub_nb = -1;
                                                    
                                                    // Construction du tableau
                                                    while ($publist_data = $publist->fetch())
                                                    {
                                                  	// Prise en compte des coef
                                                  	for($i = 0; $i <= $publist_data['coef']; $i++)
                                                  	{
                                                        array_push($pub, $publist_data['id']);
                                                  	  $pub_nb++;
                                                  	}
                                                    }
                                                    
                                                    $id=rand(0,$pub_nb);
                                                   $idban = $pub[$id];
                                                   $pubdata = $bdd->prepare("SELECT * FROM rc_headerpub2 WHERE id = :id and statut = 'active'");	
                                                   $pubdata->execute(array(
                                                  'id'=> $idban
                                                   )) ;
                                                  
                                                  $pubdata = $pubdata->fetch();
                                                  
                                                      $code = $pubdata['code'];
                                                  	 $recpid = $pubdata['id'];
                                                  
                                                    $code = str_replace('\"', '"', $code);
                                                   
                                                   echo $code;
                                                  
                                                  
                                                   // Ajout d'un affichage
                                                  if ( $recpid != '') {
                                                   add_display('cpm2', $recpid);
                                                   }
                                                  
                                                  	}



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    31 décembre 2020 à 11:09:08

                                                    Bonjour,

                                                    Déplacement vers un forum plus approprié

                                                    Le sujet est déplacé de la section Base de données vers la section PHP

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

                                                    order by classé en fonction du plus grand

                                                    × 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