CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SQL] Grouper par catégorie

Pseudo supprimé
Pseudo supprimé 14 août 2011 à 14:29:50

Hello,

J'ai eu beau cherché sur Google, je ne tombe pas sur ce que je veux.
J'ai crée plusieurs sous-forums, lesquels ayant tous une catégorie assignée.
Par exemple : Catégorie 1 > Sous_forum 1 et Sous_forum 2 ; Catégorie 2 > Sous-forum 1, Sous-forum 2 et Sous-forum 3 ; ...

Comme j'ai plusieurs sous_forums par catégorie, j'aimerais regrouper tous ces sous-forums d'une même catégorie afin de n'avoir la catégorie d'affichée qu'une seule fois, au lieu de la voir répétée à chaque ligne.

J'ai essayé un GROUP BY, ça regroupe bien par catégorie mais
ça ne me met qu'un sous-forum par catégorie, au lieu de tous ceux que je devrais avoir.

Voilà. J'espère que vous pourrez m'aider :)

H4ris
H4ris
Niveau 5
14 août 2011 à 15:50:05

Je ne suis pas sûr d'avoir bien tout compris mais c'est bien GROUP BY qu'il faut utiliser.

Si il ne t'affiche qu'un seul sous-forum par catégorie il te suffit normalement d'utiliser un while.

Pseudo supprimé
Pseudo supprimé 14 août 2011 à 15:57:03

Oui oui, j'ai bien ma boucle après, qui affiche les cellules avec le contenu.

Ca me donne ça :

while ($donnees = $reponse->fetch())
{
echo '<tr>';
echo '<td colspan="2" class="td_categorie">' . $donnees['categorie'] . '</td>';
echo '<td class="td_categorie"></td>';
echo '</tr>';
echo '<tr>';
echo '<td><img src="images/icons/' . $donnees['image'] . '.png" alt="Icone"/></td>';
echo '<td><a href="#">' . $donnees['nom'] . '</a></td>';
echo '<td>' . $donnees['description'] . '</td>';
echo '</tr>';
}

Mais je ne sais pas comment faire apparaître tous mes sous-forums.

H4ris
H4ris
Niveau 5
14 août 2011 à 16:55:05

Comment sa une boucle après ?

Il te faut aussi une boucle avant qui va englober ce que tu viens d'écrire mais qui cette fois-ci aura pour paramètre une variable qui va lister tes sous-forums.

Pseudo supprimé
Pseudo supprimé 14 août 2011 à 17:50:12

?

Disons que ma boucle est imbriquée dans le tableau. Sans GROUP BY, tous les sous-forums sont affichés.

Il me faudrait un deuxième "while" ? Si c'est le cas, je le mets où ? Entre le "query" et le début de mon tableau ?

H4ris
H4ris
Niveau 5
14 août 2011 à 18:16:54

Tu pourrais écrire ton code complet stp pour que je puisses te dire précisément ce qu'il faut faire.

Pseudo supprimé
Pseudo supprimé 14 août 2011 à 18:18:47

Tiens :

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=*', '*', '*', $pdo_options);

$reponse = $bdd->query('SELECT id, image, categorie, nom, description FROM forum_categorie GROUP BY categorie ASC');
?>
<table>
<tr>
<th colspan="2">Catégorie</th>
<th>Description</th>
</tr>
<?php
while ($donnees = $reponse->fetch())
{
echo '<tr>';
echo '<td colspan="2" class="td_categorie">' . $donnees['categorie'] . '</td>';
echo '<td class="td_categorie"></td>';
echo '</tr>';
echo '<tr>';
echo '<td><img src="images/icons/' . $donnees['image'] . '.png" alt="Icone"/></td>';
echo '<td><a href="#">' . $donnees['nom'] . '</a></td>';
echo '<td>' . $donnees['description'] . '</td>';
echo '</tr>';
}
$reponse->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
</table>

H4ris
H4ris
Niveau 5
14 août 2011 à 18:48:49

Ah mais quel idiot suis-je :hap:

Remplaces GROUP BY par ORDER BY

Pseudo supprimé
Pseudo supprimé 14 août 2011 à 18:53:05

Non non, ORDER BY m'affiche les catégories non regroupées. Soit tous les forums sont présents, mais les catégories identiques sont redondantes.
C'est pour ça que je souhaite regrouper les sous-forums ayant une même catégorie.

H4ris
H4ris
Niveau 5
14 août 2011 à 19:00:03

Essai sa :

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=*', '*', '*', $pdo_options);

$reponse = $bdd->query('SELECT id, image, categorie, nom, description FROM forum_categorie GROUP BY categorie ASC');
?>
<table>
<tr>
<th colspan="2">Catégorie</th>
<th>Description</th>
</tr>
<?php
while ($donnees = $reponse->fetch())
{
$req = $bdd->prepare('SELECT id, image, categorie, nom, description FROM forum_categorrie WHERE categorie=?');
$req->execute(array($donnees['categorie']));

while($infos = $req->fetch())
{
echo '<tr>';
echo '<td colspan="2" class="td_categorie">' . $infos['categorie'] . '</td>';
echo '<td class="td_categorie"></td>';
echo '</tr>';
echo '<tr>';
echo '<td><img src="images/icons/' . $infos['image'] . '.png" alt="Icone"/></td>';
echo '<td><a href="#">' . $infos['nom'] . '</a></td>';
echo '<td>' . $infos['description'] . '</td>';
echo '</tr>';
}
}
$reponse->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
</table>

Pseudo supprimé
Pseudo supprimé 14 août 2011 à 19:04:01

Hum, ça revient comme si y'avait le ORDER BY. Ca affiche toutes les catégories sans regroupement.

H4ris
H4ris
Niveau 5
14 août 2011 à 19:37:45

Je t'ai envoyé un MP

Pseudo supprimé
Pseudo supprimé 15 août 2011 à 10:25:21

Je t'ai répondu. J'ai screené pour aller plus vite.

Fire_Storm
Fire_Storm
Niveau 10
15 août 2011 à 12:25:55

Le truc en fait c'est de faire 2 requetes (pas sur qu'il y a moyen de faire ça en une seule requete, si oui ça m'intéresserait aussi xP).

Première requete qui va lister tout les forums,

la seconde requete sera dans le while de la premiere et prendre en paramètre l'ID du forum actuel (qui va donc changer au fur et à mesure).

Donc en gros tu fais ta premiere requete et tu fais ton while

while($r = $req->fetch( etc etc ))
{

// Et c'est ici que tu va "fabriquer" ta seconde requête à partir de $r['ID'] de la première.

$sql = 'SELECT * FROM sous_forums WHERE ForumID = '.$r['ID'];
...
...
while($r2 = $req2->fetch())
{

echo $r2['Title'];
echo $r2['Date'];
etc
etc

}

deepblue
deepblue
Niveau 16
15 août 2011 à 14:22:33

Tu fais un select sur les forums, tu fais une jointures sur les catégories et tu tries en php.

H4ris
H4ris
Niveau 5
15 août 2011 à 15:29:10

Voilà pour toi : :-)))

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=*', '*', '*', $pdo_options);

$reponse = $bdd->query('SELECT id, image, categorie, nom, description FROM forum_categorie GROUP BY categorie ASC');
?>
<table>
<tr>
<th colspan="2">Catégorie</th>
<th>Description</th>
</tr>
<?php
while ($donnees = $reponse->fetch())
{
$req = $bdd->prepare('SELECT id, image, categorie, nom, description FROM forum_categorie WHERE categorie=?');
$req->execute(array($donnees['categorie']));

echo '<tr>';
echo '<td colspan="2" class="td_categorie">' . $infos['categorie'] . '</td>';
while($infos = $req->fetch())
{
echo '<td class="td_categorie"></td>';
echo '</tr>';
echo '<tr>';
echo '<td><img src="images/icons/' . $infos['image'] . '.png" alt="Icone"/></td>';
echo '<td><a href="#">' . $infos['nom'] . '</a></td>';
echo '<td>' . $infos['description'] . '</td>';
echo '</tr>';
}
}
$reponse->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>
</table>

H4ris
H4ris
Niveau 5
15 août 2011 à 15:34:08

Erreur de ma part, remplaces $infos['categorie'] par $donnees['categorie'] à la ligne 21.

Voilà

Pseudo supprimé
Pseudo supprimé 15 août 2011 à 15:36:37

Ca marche bien, sauf qu'il fallait remplacer $infos par $donnees, car ça me mettait que la variable n'était pas définie.

Merci bien :-)

Pseudo supprimé
Pseudo supprimé 15 août 2011 à 15:37:08

Devancé :-d

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment