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   -
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 :
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:

17 réponses

domdom
 
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
2
virtualsof Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   17
 
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.
2
Rhiannon30
 
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 ;) )
1
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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']
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
domdom
 
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
0
virtualsof Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   17
 
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.
0
ThEBiShOp Messages postés 8411 Date d'inscription   Statut Contributeur Dernière intervention   1 566
 
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.
0
domdom
 
$r = $ligne["Rubrique"];
0
virtualsof Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   17
 
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 :

<?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
0
domdom
 
inverse cette ligne : $rub = $nextrub par $nextrub = $rub;
0
virtualsof Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   17
 
Bonjour,

Et bien ca fait tjs pareil : rien.

Aucun affichage. même pas une ligne...
0
domdom
 
Tu es sur que ta requête retourne des résultats ?
0
domdom
 
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
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
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";
}
0
domdom
 
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";
0
virtualsof Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   17
 
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 :

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 :(
0
virtualsof Messages postés 106 Date d'inscription   Statut Membre Dernière intervention   17
 
up :(
0
domdom
 
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";
-1