Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2011, 05h05   #1
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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.
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 07h04   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
une solution simple est de tester les valeurs au moment de les afficher dans la <table>.
Code :
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 :
1
2
3
4
5
table
{
	border-collapse:separate; /* (obligatoire avec empty-cells) */
	empty-cells:hide;
}
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/08/2011, 09h33   #3
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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!
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 09h47   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
- 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)
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 10h49   #5
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
Merci Jreaux de ta réponse Voici le CSS de ma table:


Code css :
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
Type de fichier : png Tableau.png (11,0 Ko, 6 affichages)
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 11h01   #6
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 ...
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 11h12   #7
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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>
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 11h17   #8
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Actuellement, avec la "solution simple", on obtient ca :
Code :
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 :
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 ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 04h50   #9
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
Effectivement ce que j'aimerai obtenire c'est la deuxième solution. Ma requête actuelle est celle là:

Code sql :
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
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 05h29   #10
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 08h24   #11
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
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).
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h04   #12
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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?
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h42   #13
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 :
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
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h39   #14
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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 :
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é.
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 11h41   #15
Invité de passage
 
Femme
Étudiant
Inscription : 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 : 0
Points : 0
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
Gazell est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h14.


 
 
 
 
Partenaires

Hébergement Web