IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Supprimer les doublons dans une colonne PHP lors de l'affichage


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Supprimer les doublons dans une colonne PHP lors de l'affichage
    Bonjour à tous!

    J'ai un petit problème en ce moment qui me fait un peut stagner dans mon projet. En fait, j'ai fait une requête dans ma BDD qui m'affiche l'année, le mois, le type de renouvellement et le compte(nombre de clients par type de renouvellement). Mon problème est que dans un soucis d'optimiser ma table, j'ai merai par exple que q'il y a 3 fois l'année "2010" dans la colonne "Year" mon tableau n'en affiche qu'un seul de même pour le mois de Décembre et les autres colonnes. Pour ilustrer ça voici un extrait:


    Year------- Month----------- Type-----------------------Count
    2010------ December-- Renewal of product Monthly Plan--- 4
    2010------ December-- Renewal of product Annual Plan---- 2
    2010------ December-- Renewal of product Weekly Plan--- 2
    2011------ January---- Renewal of product Monthly Plan--- 8
    2011------ January---- Renewal of product Weekly Plan--- 5
    2011------ January---- Renewal of product Annual Plan---- 3

    A la place j'aimerai avoir:

    Year--Month---- Type----------------------------Count
    2010--December Renewal of product Monthly Plan--- 4
    ---------------- Renewal of product Annual Plan---- 2
    -----------------Renewal of product Weekly Plan---- 2
    2011--January--- Renewal of product Monthly Plan--- 8
    -----------------Renewal of product Weekly Plan---- 5
    -----------------Renewal of product Annual Plan---- 3

    J'ai essayé de résoudre mon problème avec la fonction array_unique mais ça marche pas. J'ai aussi de faire un GROUP BY 'year', 'Month' mais là ça ne m'affiche par ts les types en fonction du mois et de l'année ainsi q le count.
    Quelqu'un pourrait-il m'aider? Ou me donner une piste de réflexion?
    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    une solution simple est de tester les valeurs au moment de les afficher dans la <table>.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    $anne_old = '';
    $mois_old = '';
    // requete
    // [......]
    // boucle pour lister
    while ($row = .....) {
    	// [......]
    	// ($anne_bd, $mois_bd, $type_bd, $count_bd proviennent de la bdd)
    ?>
    <tr>
    	<td><?php if($anne_bd!=$anne_old) { echo $anne_bd; $anne_old = $anne_bd; } else { echo ''; } ?></td>
    	<td><?php if($mois_bd!=$mois_old) { echo $mois_bd; $mois_old = $mois_bd; } else { echo ''; } ?></td>
    	<td><?php echo $type_bd; ?></td>
    	<td><?php echo $count_bd; ?></td>
    </tr>
    <?php
    } // fin while
    ?>
    Et, pour masquer les td vides, tu utilises en CSS empty-cells
    "The empty-cells property sets whether or not to display borders and background on empty cells in a table (only for the "separated borders" model)."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    table
    {
    	border-collapse:separate; /* (obligatoire avec empty-cells) */
    	empty-cells:hide;
    }
    Dernière modification par Invité ; 16/08/2011 à 07h23.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bonjour à jreaux62! Je te remercie pour tn post qui m'a été très utile. Effectivement ça marche maintenant!! mais le pb c'est qu'au niveau de l'affichage je n'arrive pas à garder la forme de mon tableau C'est-à-dire les bordures extérieure et intérieure tt en cachant les cellules vides. Pourrais-tu m'aider sr ce dernier point?Merci d'avance!

  4. #4
    Invité
    Invité(e)
    Par défaut
    - Quel est le CSS de ta <table>,
    - et quel résultat (esthétique) veux-tu obtenir (si tu as une image à montrer en exemple, ce serait bien)

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci Jreaux de ta réponse Voici le CSS de ma table:


    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    table, td, th
    		{
     
    		border-collapse:separate;
    		empty-cells:hide;
    		border:1px solid black;
    		color:white;
    		border:0px;
    		cellspacing:11px;
    		}
    		td
    		{
    		font-family:"Trebuchet MS";
    		border:1px solid black;
    		font-weight:bold italic;
    		font-size:16px;
    		color:black;
    		text-align:left;
    		padding-left:17px;
    		}
    		th
    		{
    		font-family:"Trebuchet MS";
    		border:1px solid black;
    		font-weight:bold;
    		font-size:14px;
    		color:black;
    		text-align:left;
    		padding-left:17px;
    		}

    Et j'aimerai obtenir ceci: cf fchier-joint
    Merci d'avance pour ton aide et ta disponibilité
    Images attachées Images attachées  

  6. #6
    Invité
    Invité(e)
    Par défaut
    Aurais-tu un bout du code html généré pour ton tableau (un bout suffit pour les tests)

    [Edit] En fait, non. Je vois ce que tu veux. Mais ca ne peut pas se faire de cette manière.

    Pour faire ce que tu veux, il faut FUSIONNER les cellules.
    Ce qui n'est pas si simple ...

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Voilà un bout du code jspr q ça suffira:
    <table>

    <tr>
    <th>Year</th><th>Month</th><th>Type</th><th>Count</th>
    </tr>
    //Le reste c'est du php pr afficher les balises "<td></td>" en tenant compte du code ci-dessus
    </table>

  8. #8
    Invité
    Invité(e)
    Par défaut
    Actuellement, avec la "solution simple", on obtient ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <table id="table-miseenpage">
    <tr>
    	<td>2010</td>
    	<td>decembre</td>
    	<td>zert zerzryrty</td>
    	<td>8</td>
    </tr>
    <tr>
    	<td>2011</td>
    	<td>janvier</td>
    	<td>etyu tyu</td>
    	<td>5</td>
    </tr>
    <tr>
    	<td></td>
    	<td></td>
    	<td>zert zerzryrty</td>
    	<td>78</td>
    </tr>
    <tr>
    	<td></td>
    	<td>fevrier</td>
    	<td>qergt sdfgsdfgsdfg sdfgsdfgsd </td>
    	<td>45</td>
    </tr>
    <tr>
    	<td></td>
    	<td>mars</td>
    	<td>etyu tyu</td>
    	<td>123</td>
    </tr>
    <tr>
    	<td></td>
    	<td></td>
    	<td>qergt wfdgqdtergt qsgteqg frqe</td>
    	<td>68</td>
    </tr>
    <table>
    Mais ce que tu veux, c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <table id="table-miseenpage">
    <tr>
    	<td>2010</td>
    	<td>decembre</td>
    	<td>zert zerzryrty</td>
    	<td>8</td>
    </tr>
    <tr>
    	<td rowspan="5">2011</td>
    	<td rowspan="2">janvier</td>
    	<td>etyu tyu</td>
    	<td>5</td>
    </tr>
    <tr>
    	<td>zert zerzryrty</td>
    	<td>78</td>
    </tr>
    <tr>
    	<td>fevrier</td>
    	<td>qergt sdfgsdfgsdfg sdfgsdfgsd </td>
    	<td>45</td>
    </tr>
    <tr>
    	<td rowspan="2">mars</td>
    	<td>etyu tyu</td>
    	<td>123</td>
    </tr>
    <tr>
    	<td>qergt wfdgqdtergt qsgteqg frqe</td>
    	<td>68</td>
    </tr>
    <table>
    et ca demande une solution plus complexe ... au niveau des requêtes SQL, avec des GROUP BY, ... requêtes imbriquées ...

    -> Quelle est ta requête actuelle ?
    Dernière modification par Invité ; 16/08/2011 à 11h32.

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Effectivement ce que j'aimerai obtenire c'est la deuxième solution. Ma requête actuelle est celle là:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT YEAR( FROM_UNIXTIME( uc_recurring_users.created ) ) AS YEAR, MONTH( FROM_UNIXTIME( uc_recurring_users.created ) ) AS 
    			MONTH ,  `fee_title` , COUNT(  'Renewal of product' ) AS Number_of_users FROM  `uc_recurring_users` 
    			GROUP BY  `Month` ,  `fee_title` 
    			ORDER BY  `Year` ,  `Month` SELECT YEAR( FROM_UNIXTIME( uc_recurring_users.created ) ) AS YEAR, MONTH( FROM_UNIXTIME( uc_recurring_users.created ) ) AS 
    			MONTH ,  `fee_title` , COUNT(  'Renewal of product' ) AS Number_of_users FROM  `uc_recurring_users` 
    			GROUP BY  `Month` ,  `fee_title` 
    			ORDER BY  `Year` ,  `Month` ;

    P.S fee_title:c'est le type dans mon tableau

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je pensais stocker le contenu vide des cellules dans une variable et ensuite faire un rowspan de celui-ci. Mais sachant que le tableau peut s'aggrandir avec le temps c'est pas facile

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    La solution la plus simple même si elle consomme un peu de mémoire c'est de :

    - Stocker l'ensemble des résultats de ta requête dans un tableau tout simple a 2 dimensions.

    - Boucler une 1ère fois sur ton tableau pour rajouter a chaque ligne 2 valeurs nb ligne year et nb libre month (Une des façon simple c'est en parcourant de stocker dans des variables les valeurs a chaque changement, la position du changement, et un incrément a chaque valeur identique, et au changement dans ton tableau tu va modifier les valeurs de l'index du changement que tu avait stocké.

    - Tu boucle sur ton tableau pour générer le html. La pareil tu stocke les valeurs a chaque changement et tu ne génère le TD correspondant que si la valeur a changé par rapport a la a ligne du dessus, et quand tu génère le TD tu rajoute le row span que tu as stocké a l'étape d'avant. (Un peu comme la 1ère réponse de jreaux62 mais ton if entoure le td et tu rajoute le rowspan).

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse mais j'aimerai quelque chose d'assez simple. Pour celà je me demandais si on ne pouvait pas faire un count(nbre de lignes ) tout en vérifiant la valeur contenu dans chaque cellule. Dès qu'on s'aperçoit du changement, on fusionne ces cellules et ainsi de suite. A ce moment là le rowspan pourrait contenir la valeur du count(nbre de lignes). Qu'en dites vous?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ce qui complique les choses, c'est qu'il faut afficher les rowspan="..." AVANT d'afficher les lignes suivantes ...
    Il faut à chaque fois compter le nombre de lignes (même Year, même Month) qui seront affichées APRES.

    Il faut donc bien comprendre le principe de fonctionnement, et définir la méthode.

    Tolriq a donné une mthode en passant par un array.

    En voici une, avec requêtes imbriquées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    - requête : SELECT DISTINCT Year ORDER BY Year ASC
    - while (pour chaque Year) :
    	<tr>
    	- requête : SELECT count(nombre de lignes) WHERE ce-Year
    		$nbre_ligne_Year (va permettre de remplir le 1er rowspan Year)
    		- si 1ere ligne : <td rowspan="$nbre_ligne_year">$Year<td>
    		- sinon : rien
    	- requête : SELECT DISTINCT Month WHERE ce Year
    		- requête : count(nombre de lignes) WHERE ce-Month AND ce-Year
    			$nbre_ligne_Month (va permettre de remplir le 2ème rowspan Month)
    			- si 1ere ligne : <td rowspan="$nbre_ligne_Month">$Month<td>
    			- sinon : rien
    		- requête : SELECT Type, Count WHERE ce-Year AND ce-Month
    			- <td>$Type<td>
    			- <td>$Count<td>
    	</tr>
    fin while
    Dernière modification par Invité ; 17/08/2011 à 11h54.

  14. #14
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses mais ap une bonne journée de plus à me creuser les méninges j'ai pu trouver un moyen simple de le faire sans avoir à passer par les tableaux et les requêtes SQL! Et ça marche!!...Enfin en partie. Je vous mets le code pour q vs puissez l'examiner :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    			$old_year='';
    			$old_month='';
    			$row_back='';
    			$year_count=1;
    $line=mysql_fetch_row($result);
    			$old_year=$line[0];
    			$row_back.="<td>".$line[1]."</td><td>".$line[2]."</td><td>".$line[3]."</td>";
     
    			while($line=mysql_fetch_row($result))
    			{//start while
    				if ($line[0]!=$old_year){
    					echo "<tr><td rowspan='".$year_count."'>".$old_year."</td>".$row_back."</tr>";
    					$year_count=1;
    					$old_year=$line[0];
    					$row_back='';
    				}
    				else
    				{
    					$year_count++;
    					$row_back.="</tr><tr>";
    				}
    				$row_back.="<td>".$line[1]."</td><td>".$line[2]."</td><td>".$line[3]."</td>";
     
    			}//End while
    			echo "<tr><td rowspan='".$year_count."'>".$old_year."</td>".$row_back."</tr>";
     
    ?>

    Bon actuellement ça marche pour la colonne des dates et en ce moment j'essaie de trouver le moyen de le faire avec la colonnes des mois. Je reste à l'écoute chères amis et merci à Jreaux et Dulriq qui m'ont aidé.

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Gazell Voir le message
    Je reste à l'écoute chères amis et merci à Jreaux et Dulriq qui m'ont aidé.
    Oops je voulais dire Tolriq

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Supprimer les doublons dans une colonne avec condition
    Par sims92.66 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/02/2012, 18h58
  3. supprimer les doublons . . . . d'une colonne donnée !
    Par pekka77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/10/2006, 17h38
  4. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo