enregistrements rgroupé sous un titre

Eléphant du PHP | 120 Messages

01 oct. 2008, 16:25

Bonjour,
jai une table avec 4 champs dont un "type" qui se rtrouve dans plusieurs enregistrement. j'aimerai éviter de répéter le titre et de l'afficher qu'une seul fois pour les enregistrements du meme type.
En plus j'aimerai éviter les tableaux et donc utiliser que le css et php.
Voici un exemple n html :

Code : Tout sélectionner

<table width="32%" border="0" cellspacing="0" cellpadding="0"> <tr> <td>Cuisine</td> <td>&nbsp;</td> </tr> <tr> <td>Gazini&egrave;re</td> <td>100</td> </tr> <tr> <td>Frigo</td> <td>400</td> </tr> <tr> <td>micro ondes</td> <td>200</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>Salon</td> <td>&nbsp;</td> </tr> <tr> <td>Canap&eacute;</td> <td>300</td> </tr> <tr> <td>fauteuil</td> <td>75</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>Chambres</td> <td>&nbsp;</td> </tr> <tr> <td>lits</td> <td>200</td> </tr> <tr> <td>armoire</td> <td>150</td> </tr> </table>
Est ce que quelqu'un pourrait m'indiquer comment faire s'il vous plait car j'ai cherché sur les mais pas trouvé
Meci d'avance

Mammouth du PHP | 1353 Messages

01 oct. 2008, 16:36

C'est pas rès clair tout ca, mais bon peut etre que le mot DISTINCT dans ta requete sql te permettra de faire ce que tu veux.

En effet si tu fais

Code : Tout sélectionner

SELECT DISTINCT type FROM table
tu n'auras qu'une fois chaque type...

Apres pour utiliser les css bah tu fais par exemple un <div class="titre"> pour chaque titre et tu personnalise la classe .titre dans le fichier css...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
AB
ViPHP | 5818 Messages

01 oct. 2008, 16:40

Une autre solution

Tu enregistres le premier titre dans une variable, et si les titres suivants correspondent à cette variable, tu ne les affiche pas...

Eléphant du PHP | 120 Messages

01 oct. 2008, 16:48

Merci pour ses réponses rapide.
Pour un complément d'info, voici d'abord le code que j'utilise actuellment :
<table width="100%" border="0" cellspacing="0" cellpadding="0">
				  <?php 
                  $titre = ''; 
                  $i = 0 ; 
                  do  
                  {     
                ?>
              <tr onmouseout="this.style.backgroundColor = ''" onmouseover="this.style.backgroundColor = '#0066FF'" bgcolor="<?php echo (((++$AltColors1) % 2) == 0) ? "#77A8ED" : "#1B4792"; ?>">
                <td><?php echo $row_tarif_act['type']; ?></td>
                <td><?php echo $row_tarif_act['intitule']; ?></td>
                <td><?php echo $row_tarif_act['tarif']; ?> €</td>
              </tr>
              <?php  
              $i++; 
              }   
              while ($row_tarif_act = mysql_fetch_assoc($tarif_act));  
            ?> 
			</table>
Et ce que je voudrai, 'est mettre le type, qui est identique pour plusieurs enregistrement, en titre avec un regroupement des enregistrement correspondant en dessous.
Désolé, j'espere avoir été un peu plus clair
merci

ViPHP
AB
ViPHP | 5818 Messages

01 oct. 2008, 17:06

Ma solution est adaptée dans ton cas.

Essaies de la mettre en application ce n'est pas compliqué :wink:

Ensuite si ça ne marche pas montres-nous ce que tu as essayé.

EDIT pour être plus précis dans nos réponses, il faudrait que tu nous montre ta requête.

Eléphant du PHP | 120 Messages

01 oct. 2008, 18:03

J'ai progressé mais c'est pas encore ça. Le regroupement ne s'effecue pas.
Voici le modifs effectué :
<table width="100%" border="0" cellspacing="0" cellpadding="0">
				  <?php 
                  $titre = ''; 
                  $i = 0 ; 
                  do  
                  {     
                ?>
                <?php  
                  if ($titre != $row_tarif_act['id_activite'])  
                  {          
                    if($i != 0)  
                      echo '</ td></ tr>'; 
                    echo '<tr><td colspan="2">';  
                    $titre =  $row_tarif_act['id_activite'];        
                    $i = 0; 
                 echo $row_tarif_act['type']; 
				 } ?>
                 
              <tr onmouseout="this.style.backgroundColor = ''" onmouseover="this.style.backgroundColor = '#0066FF'" bgcolor="<?php echo (((++$AltColors1) % 2) == 0) ? "#1B4792" : "#77A8ED"; ?>">
                <td><?php echo $row_tarif_act['intitule']; ?></td>
                <td><?php echo $row_tarif_act['tarif']; ?> €</td>
              </tr>
              <?php  
              $i++; 
              }   
              while ($row_tarif_act = mysql_fetch_assoc($tarif_act));  
            ?> 
			</table>
Meric pour ton aide

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
AB
ViPHP | 5818 Messages

01 oct. 2008, 20:56

Ton code est certainement mal interprété par exemple if($i != 0) ... si tu veux plusieurs exécutions dans cette condition il faut utiliser des accolades if($i != 0) {...;}

Ensuite il faudrait que tu nous montre ta requête. Le conseil que je t'ai donné précédemment n'est pas adapté dans tous les cas.

Eléphant du PHP | 120 Messages

02 oct. 2008, 17:02

bonjour,

voci la requete :
<?php
mysql_select_db($database_base, $base);
$query_tarif_act = "SELECT * FROM tarif_activite ORDER BY type ASC";
$tarif_act = mysql_query($query_tarif_act, $base) or die(mysql_error());
$row_tarif_act = mysql_fetch_assoc($tarif_act);
$totalRows_tarif_act = mysql_num_rows($tarif_act);
?>
Meric

ViPHP
AB
ViPHP | 5818 Messages

02 oct. 2008, 21:57

Oui je m'en doutais un peu...

Ce serait plus classique et aussi plus facile à programmer si tu faisais une deuxième table avec les différents types.

Ensuite il te resterait à lire cette table de type avec une petite jointure vers la table "tarif_actualité". Eventuellement tu pourrais créer un type "divers" pour les éléments non typés.

Sinon ça va te faire un gros traitement php derrière... et ça sera assez compliqué à gérer.