PHP/MySql - Regrouper des données
Résolu
virtualsof
Messages postés
106
Date d'inscription
Statut
Membre
Dernière intervention
-
virtualsof Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
virtualsof Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je viens solliciter vos lumières pour un sujet je pense relativement simple mais auquel je n'ai pas la direction à prendre.
Voila, j'ai dans ma BDD, plusieurs enregistrements que je voudrais regrouper par rubrique en affichant qu'une seule fois la rubrique auquel tous ces enregistrements appartiennent.
Exmple de la Bbb :
Sortie désirée :
D'avance merci.
Je viens solliciter vos lumières pour un sujet je pense relativement simple mais auquel je n'ai pas la direction à prendre.
Voila, j'ai dans ma BDD, plusieurs enregistrements que je voudrais regrouper par rubrique en affichant qu'une seule fois la rubrique auquel tous ces enregistrements appartiennent.
Exmple de la Bbb :
Id Rubrique Nom Lien 1 Telephone Nokia Nokia.php 2 Telephone Siemens siemens.php 3 Telephone HTC HTC.php 4 Ecran Acer acer.php 5 Ecran Asus Asus.php
Sortie désirée :
Téléphone : Nokia Siemens HTC Ecran : Acer Asus
D'avance merci.
A voir également:
- PHP/MySql - Regrouper des données
- Fuite données maif - Guide
- Trier des données excel - Guide
- Comment regrouper des applications sur android - Accueil - Guide Android
- Comment regrouper des pdf - Guide
- Easy php - Télécharger - Divers Web & Internet
17 réponses
Dans le cas ou pour tous tes enregistrements de la table, le champ rubrique est renseigné :
$old = ""; // ou autre valeur quelconque
while ($ligne = mysql_fetch_array($result)) {
$r = $ligne[Rubrique];
if ( $r != $old ) {
// nouvelle rubrique ...
$old = $r;
}
else { // rubrique courante
....
}
} // while
$old = ""; // ou autre valeur quelconque
while ($ligne = mysql_fetch_array($result)) {
$r = $ligne[Rubrique];
if ( $r != $old ) {
// nouvelle rubrique ...
$old = $r;
}
else { // rubrique courante
....
}
} // while
Comme j'ai trouvée la solution, enfin qu'elle m'a été donnée sur un autre forum, et que je pense que ça peux resservir, je la transmet.
https://www.developpez.net/forums/d698965/php/php-base-donnees/regrouper-donnees-d-base-date/#post4073703
Résolu.
https://www.developpez.net/forums/d698965/php/php-base-donnees/regrouper-donnees-d-base-date/#post4073703
Résolu.
Dans le genre :
$precedant="plop";
while($truc=mysql_fetch_array($nom_exe_requete))
{
if($truc["rubrique"]==$precedant)
{
echo $truc["nom"];
}
else
{
echo "<br>".$truc["rubrique"].":".$truc["nom"];
}
$precedant=$truc["rubrique"]
}
Je pense qu'en faisant quelque chose comme cela, tu devrais obtenir ton affichage.(Avec un tableau et en jouant sur les <tr> <td>, ça pourrait être mieux ;) )
$precedant="plop";
while($truc=mysql_fetch_array($nom_exe_requete))
{
if($truc["rubrique"]==$precedant)
{
echo $truc["nom"];
}
else
{
echo "<br>".$truc["rubrique"].":".$truc["nom"];
}
$precedant=$truc["rubrique"]
}
Je pense qu'en faisant quelque chose comme cela, tu devrais obtenir ton affichage.(Avec un tableau et en jouant sur les <tr> <td>, ça pourrait être mieux ;) )
tu peux faire une requête comme ceci :
select * from table order by Rubrique, Nom asc
et dans ton code php, tu fais un nouvelle ligne pour chaque valeur de $result['Rubrique']
select * from table order by Rubrique, Nom asc
et dans ton code php, tu fais un nouvelle ligne pour chaque valeur de $result['Rubrique']
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
une solution possible
select Rubrique, Nom from ... order by Rubrique ASC ou DESC
et après dans la sortie tu détecte le changement de rubrique
select Rubrique, Nom from ... order by Rubrique ASC ou DESC
et après dans la sortie tu détecte le changement de rubrique
Merci pour votre réponse.
J'ai effectivement pensé a ça mais cette option m'oblige à connaitre les valeur des rubriques. Hors je ne les connait pas lors de l'interrogation de la BDD.
C'était pas spécifié effectivement. oops.
En fait il faudrait que j'arrive à faire une nouvelle ligne à chq changement de rubrique.
J'ai effectivement pensé a ça mais cette option m'oblige à connaitre les valeur des rubriques. Hors je ne les connait pas lors de l'interrogation de la BDD.
C'était pas spécifié effectivement. oops.
En fait il faudrait que j'arrive à faire une nouvelle ligne à chq changement de rubrique.
tu n'as pas besoin de savoir ce qu'il y a dans ta rubrique en faisant ça non, il faut juste contrôler quand il y a un changement de rubrique.
Tout d'abord merci infiniment toutes pour vos suggestions.
J'ai tout d'abord essayé la methode de Rhiannon sans succès (en fait même résultat : rien).
Puis avec celle de DomDom, voila ce que j'ai écrit :
Donc ceci ne m'affiche rien :/
Effectivement on est dans le cas ou toutes les rubriques sont renseignées, mais il peux y en avoir plusieurs, et pas seulement 2 différentes.
Alors j'ai p-e pas compris un truc. Merci de votre patience
J'ai tout d'abord essayé la methode de Rhiannon sans succès (en fait même résultat : rien).
Puis avec celle de DomDom, voila ce que j'ai écrit :
<?php $nextrub = ""; while($row_selectPages = mysql_fetch_assoc($selectPages)) { $rub = htmlentities($row_selectPages['rub'], ENT_COMPAT, 'iso-8859-1'); if ($rub != $nextrub) { ?> <h4><strong><?php echo $rub; ?></strong></h4> <?php $rub = $nextrub; ?> <?php } else { ?> <h4><strong><?php echo $rub; ?></strong></h4> <?php }} ?>
Donc ceci ne m'affiche rien :/
Effectivement on est dans le cas ou toutes les rubriques sont renseignées, mais il peux y en avoir plusieurs, et pas seulement 2 différentes.
Alors j'ai p-e pas compris un truc. Merci de votre patience
Je viens de tester sur mon site ce bout de code
$query = "select * from docent order by DENT_TYPE asc ";
$result = @mysql_query($query, $link) or die ("Erreur dans la lecture de la table docent");
$nextrub = "";
while($row_selectPages = mysql_fetch_assoc($result)) {
$rub = htmlentities($row_selectPages['DENT_TYPE'], ENT_COMPAT, 'iso-8859-1');
if ($rub != $nextrub) {
$nextrub = $rub;
echo "<h4><strong>$rub</strong></h4>\n";
} else {
echo "$rub\n";
}
}
?>
voila le résulat :
ACC
ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC
FAQ
FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ
ITEC
ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC
$query = "select * from docent order by DENT_TYPE asc ";
$result = @mysql_query($query, $link) or die ("Erreur dans la lecture de la table docent");
$nextrub = "";
while($row_selectPages = mysql_fetch_assoc($result)) {
$rub = htmlentities($row_selectPages['DENT_TYPE'], ENT_COMPAT, 'iso-8859-1');
if ($rub != $nextrub) {
$nextrub = $rub;
echo "<h4><strong>$rub</strong></h4>\n";
} else {
echo "$rub\n";
}
}
?>
voila le résulat :
ACC
ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC ACC
FAQ
FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ FAQ
ITEC
ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC ITEC
Id Rubrique Nom Lien 1 Telephone Nokia Nokia.php 2 Telephone Siemens siemens.php 3 Telephone HTC HTC.php 4 Ecran Acer acer.php 5 Ecran Asus Asus.php
$sql = 'SELECT Id, Rubrique, Nom, Lien FROM latable ORDER BY Rubrique'; $result = mysql_query($sql) or exit(mysql_error()); $rubrique = ''; while( $ligne = mysql_fetch_assoc($result) ) { if( $ligne['Rubrique'] != $rubrique ) $rubrique = $ligne['rubrique']; echo '<h4>' . $rubrique . '</h4>' . "\n"; echo '<p>' . $ligne['id'] . ' - ' . $ligne['Nom'] . ' - ' .$ligne['lien'] . '</p>' . "\n"; }
en gras les 2 lignes modifiées
if( $ligne['Rubrique'] != $rubrique )
$rubrique = $ligne['Rubrique'];
echo '<h4>' . $rubrique . '</h4>' . "\n";
echo '<p>' . $ligne['Id'] . ' - ' . $ligne['Nom'] . ' - ' .$ligne['Lien'] . '</p>' . "\n";
if( $ligne['Rubrique'] != $rubrique )
$rubrique = $ligne['Rubrique'];
echo '<h4>' . $rubrique . '</h4>' . "\n";
echo '<p>' . $ligne['Id'] . ' - ' . $ligne['Nom'] . ' - ' .$ligne['Lien'] . '</p>' . "\n";
bonjour,
Navré de n'avoir pas répondu plus tôt et encore merci. J'ai toujours pas réussi à obtenir le résultat souhaité.
Ce que vous m'avez proposé me donne le résultat suivant :
Hors je souhaite que le nom de la rubrique n'apparaisse qu'UNE seule fois.
Alors j'ai bien compris qu'on affecte à la variable $rub, le nom de la première rubrique, puis on teste à chq ligne si $rub = le nom de la première itération. Sinon on lui affecte le nouveau nom rencontré puis on recommence.
Mais en pratique je m'en sort pas...
Par contre j'ai utilisé Do / While car je me retrouve sinon avec un enregistrement en moins.
Mais je retrouve maintenant avec le nom de la première rubrique qu reviens...
Help :(
Navré de n'avoir pas répondu plus tôt et encore merci. J'ai toujours pas réussi à obtenir le résultat souhaité.
Ce que vous m'avez proposé me donne le résultat suivant :
Telephone Nokia Nokia.php Telephone Siemens siemens.php Telephone HTC HTC.php Ecran Acer acer.php Ecran Asus Asus.php Telephone Nokia Nokia.php
Hors je souhaite que le nom de la rubrique n'apparaisse qu'UNE seule fois.
Alors j'ai bien compris qu'on affecte à la variable $rub, le nom de la première rubrique, puis on teste à chq ligne si $rub = le nom de la première itération. Sinon on lui affecte le nouveau nom rencontré puis on recommence.
Mais en pratique je m'en sort pas...
Par contre j'ai utilisé Do / While car je me retrouve sinon avec un enregistrement en moins.
Mais je retrouve maintenant avec le nom de la première rubrique qu reviens...
$nextrub = ""; do { $rub = $row_selectPages['rub']; $rub = htmlentities($row_selectPages['rub'], ENT_COMPAT, 'iso-8859-1'); //echo $rub; if ($rub != $nextrub) { $nextrub = $row_selectPages['rub']; ?> <h4><strong><?php echo $nextrub; ?></strong></h4> <?php } else { ?> <h4><strong><?php echo $nextrub; ?></strong></h4> <?php echo $row_selectPages['titre']; ?> <?php }} while($row_selectPages = mysql_fetch_assoc($selectPages)); ?>
Help :(
Je viens de tester ton code :
4 - Acer - acer.php
5 - Asus - toto.php
1 - Nokia - nokia.php
2 - Siemens - siemens.php
3 - HTC - htc.php
Il fonctionne à merveille sous réserve de respecter le nom des champs : Id et Lien
echo '<p>' . $ligne['Id'] . ' - ' . $ligne['Nom'] . ' - ' .$ligne['Lien'] . '</p>' . "\n";
4 - Acer - acer.php
5 - Asus - toto.php
1 - Nokia - nokia.php
2 - Siemens - siemens.php
3 - HTC - htc.php
Il fonctionne à merveille sous réserve de respecter le nom des champs : Id et Lien
echo '<p>' . $ligne['Id'] . ' - ' . $ligne['Nom'] . ' - ' .$ligne['Lien'] . '</p>' . "\n";