PHP/MySql - Regrouper des données

Résolu/Fermé
virtualsof Messages postés 106 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 - 16 avril 2009 à 14:36
virtualsof Messages postés 106 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 - 2 mai 2009 à 20:42
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

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 mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 17
2 mai 2009 à 20:42
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
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
16 avril 2009 à 15:06
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
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 mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 17
16 avril 2009 à 15:13
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 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
16 avril 2009 à 15:21
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
$r = $ligne["Rubrique"];
0
virtualsof Messages postés 106 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 17
16 avril 2009 à 17:30
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
inverse cette ligne : $rub = $nextrub par $nextrub = $rub;
0
virtualsof Messages postés 106 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 17
17 avril 2009 à 14:20
Bonjour,

Et bien ca fait tjs pareil : rien.

Aucun affichage. même pas une ligne...
0
Tu es sur que ta requête retourne des résultats ?
0
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
17 avril 2009 à 15:13
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
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 mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 17
21 avril 2009 à 16:15
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 mercredi 27 septembre 2006 Statut Membre Dernière intervention 17 août 2014 17
23 avril 2009 à 16:59
up :(
0
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