[PHP] Fusionner 2 tableaux

Fermé
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012 - 2 juil. 2012 à 12:55
zolani2 Messages postés 1 Date d'inscription mardi 3 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012 - 3 juil. 2012 à 14:23
Bonjour,

J'ai un soucis avec mon code php. J'ai 3 équipes : 1,2 et 3 et 4 produits : AeRE, AeTM, CMT et ARD.
J'ai donc le tableau suivant qui est généré, à partir d'une requête mysql (je compte combien d'articles ont été gérées par chaque équipe pour chaque produit)

Team Product COUNT(*)
1 AeRE 362
1 AeTM 569
1 CMT 6
2 AeRE 90
2 AeTM 55
2 ARD 20
2 CMT 4
3 AeRE 34
3 AeTM 51

Mon gros problème est qu'il n'y a pas de 0 sur les lignes où l'équipe n'a pas traiter le produit. Par exemple, la team 1 n'a pas traiter de ARD. La team 3 n'a traiter que AeRE et AeTM.

Je me suis donc dis que j'allais prendre ce tableau suivant :

Team Product COUNT(*)
1 AeRE 0
1 AeTM 0
1 ARD 0
1 CMT 0
2 AeRE 0
2 AeTM 0
2 ARD 0
2 CMT 0
3 AeRE 0
3 AeTM 0
3 ARD 0
3 CMT 0

Et essayer de le remplir afin d'obtenir ceci :

Team Product COUNT(*)
1 AeRE 362
1 AeTM 569
1 ARD 0
1 CMT 6
2 AeRE 90
2 AeTM 55
2 ARD 20
2 CMT 4
3 AeRE 34
3 AeTM 51
3 ARD 0
3 CMT 0

Mais je n'y arrive vraiment pas. (Cela fait plus de 2j que je suis dessus, je commence à perdre patience ...)

Si quelqu'un pouvait m'aider, ce serait vraiment sympa !

A voir également:

6 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
2 juil. 2012 à 13:36
Bonjour,

J'ai une classe Html qui fait ça:

require_once 'inc/Html.class.php';
$Html = new Html('UTF-8');
$Html->setTheadValues(array('AeRE','AeTM','CMT','ARD'));
$values = array(
array(1,'AeRE',362),
array(1,'AeTM',569),
array(1,'CMT',6),
array(2,'AeRE',90),
array(2,'AeTM',55),
array(2,'ARD',20),
array(2,'CMT',4),
array(3,'AeRE',34),
array(3,'AeTM',51),
);
$Html->setTableValues($values);
$Html->table();

et qui en sortie me restitue ça:
<table>
  <thead>
    <tr>
      <td> </td>
      <td>AeRE</td>
      <td>AeTM</td>
      <td>CMT</td>
      <td>ARD</td>
      <td>TOT</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td><td>362</td><td>569</td><td>6</td><td> </td><td>937</td>
    </tr>
    <tr>
      <td>2</td><td>90</td><td>55</td><td>4</td><td>20</td><td>169</td>
    </tr>
    <tr>
      <td>3</td><td>34</td><td>51</td><td> </td><td> </td><td>85</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>CUMUL</td>
      <td>486</td><td>675</td><td>10</td><td>20</td><td>1191</td>
    </tr>
  </tfoot>
</table>


mais le code de cette classe HTML est trop long pour être collé ici...

A+



0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
2 juil. 2012 à 14:56
C'est pas mal, cela ressemble à peu près au résultat que je veux avoir, sauf qu'il n'y a pas de 0 mais des cases vides.
Pourrait-tu m'envoyer le code par message privé ? (Si trop gros pour poster ici)
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
2 juil. 2012 à 15:46
Salut !
La requête ?!
T'utilise des jointures ou pas ?
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
2 juil. 2012 à 15:51
Voici ma requête :
$result=mysql_query("
SELECT 'Team' , 'Product' , COUNT(*) AS nb_article FROM 'article_database'WHERE 'Team'IN ('AB1','AB2','PNE') AND 'Product'IN ('AeRE', 'AeTM','ARD','CMT')
GROUP BY 'Team' , 'Product'
")
while($r[]=mysql_fetch_array($result_test));

Ensuite j'ai
$r[0][0] = 'AB1'
$r[0][1] = 'AeRE'
$r[0][0] = '362'
$r[1][0] = 'AB1'
$r[1][1] = 'AeTM'
$r[1][0] = '569'

etc.
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
2 juil. 2012 à 15:52
Tous les paramètres dépendent en réalité de variables, par exemple à la place de Team et Product ça peut être autre chose (idem pour les conditions). J'ai simplifié la requête pour travailler sur un champ réduit d'articles
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 2/07/2012 à 16:24
Hmmm ok !
C'est pas comme ça qu'on fait du tout !

En base de données, il existe un principe qui s'appele "Jointure", ça te permet de relier des tables entre elles selon des conditions !

Or, au lieu de stocker tout dans une seule table, on sépare les informations sur plusieurs tables, tout en restant logique en ce qui concerne les relations !

Dans ton cas !
Tu peux créer trois tables ...
equipes(id, nom)        
produits(id, reference)        
article(id, contenu)


Si on en reste la, on a séparer(décomposer) les informations, mais on a créer aucune relation entre elles !
Donc on ajoute une quatrième table qui representera la relation(les liens) entre les 3 dernières tables ...
relation(id_equipe, id_produit, id_article)


Dans la table relation, par exemple, le tuple suivant signifiera !
relation ( 3, 2, 6)


L'équipe dont l'id est 1 a créer l'article 6 qui parle du produit 2 !

Requête !
C'est la qu'entre le principe des jointures, qui est l'opposé de ce qu'on avait fait, or, la décomposition !

SELECT eq.nom, prod.reference, COUNT(*) AS [Nombre article]        
FROM equipes eq        
INNER JOIN relation r ON eq.id = r.id_equipe         
INNER JOIN produits prod ON prod.id = r.id_produit        
RIGHT JOIN article art ON art.id = r.id_article        
GROUP BY eq.nom, prod.reference


- Le RIGHT JOIN signifie que si in n'y a aucun tuple qui vérifie la condition de jointure, alors on mets 0 dans l'attribut virtuel "Nombre article" ...

Si la condition n'est pas vérifié, ça veut dire qu'il n'y a aucun article écrit par une équipe A concernant un produit B, donc on mets 0, et je pense que c'est ce que tu cherchais a faire !

Remarque :
Tout les id sont des clé primaires en auto-increment !
Tout les attributs de la table relations sont des clé primaires !


Voila, j'ai pas essayer, donc si tu trouve des erreurs, note les !
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par baladur13 le 30/07/2015 à 23:58
Bonjour mtardieu

Votre requête est OK:

$result=mysql_query("
SELECT 'Team' , 'Product' , COUNT(*) AS nb_article FROM 'article_database'WHERE 'Team'IN ('AB1','AB2','PNE') AND 'Product'IN ('AeRE', 'AeTM','ARD','CMT')
GROUP BY 'Team' , 'Product'
")
while($r[]=mysql_fetch_array($result_test));

Avec ma classe $Html vous n'avez besoin de rien d'autre....


A+
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
2 juil. 2012 à 16:21
Ok merci.

Je vais essayer ça et je reviendrais vers toi. Le seul problème, c'est que jvais avoir une vingtaine de tables avec beaucoup de valeurs ^^
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
2 juil. 2012 à 16:25
Une vingtaine ?!!
Comment ça !!
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
2 juil. 2012 à 17:08
En fait je pense qu'on se comprend mal. C'est pas évident d'expliquer son problème :)
Tu peux voir ici 15 lignes tirées au hasard de ma base de données (J'ai en tout plus de 9000 lignes sous le même format). Pour faciliter la compréhension, je me suis arrêté à la colonne "sev" mais il y en a encore une dixaine derrière.

http://tinypic.com/images/goodbye.jpg

Donc en gros, j'ai mes données dans une bonne centaine de feuilles excels (une par semaine et par équipe) et je nourris ma base de données avec ces feuilles.
Chaque ligne contient beaucoup de données, rentrées par les user comme Product, Release, Phase, Sev etc.
Je devrais pouvoir ensuite faire n'importe quelle requête, comme compter le nombre d'article par release et par team. Ou par phase et par produit etc.
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 2/07/2012 à 19:28
Hmmm je vois !

Le fait d'avoir plusieurs attributs n'implique pas que tu dois créer plusieurs tables !

Par exemple, les attributs "year" et "week", je suppose que c'est l'année et la semaine de production d'un produit, donc ils concernent les produits, et sachant que chaque produit possède une seule date de production, dans ce cas, l'attribut "year" et "week" doivent se trouver dans la table "produits" !

Tu dois savoir un truc a propos des relations, ou plus précisément "les cardinalités" !
En général, on a les cardinalités "1:N" et "1:1" !

Exemple !
personne(id, nom, prenom, adresse)

On peut décomposer cette relation en deux sous-tables, ça donnerai !
personne_identite (id, nom, prenom)
personne_infos (id_personne, adresse)

Si tu remarque bien, la cardinalité entre les deux tables est "1:1", qui veut dire qu'on peut trouver qu'un seul tuple dans la table "personne_infos" qui peut être relier avec un tuple de la table "personne_identite", ou qu'on peut trouver qu'une seule adresse pour une personne donnée, donc le fait d'avoir procéder a la décomposition de la table "personne" était inutile, car "id" identifie "nom" et "prenom", mais aussi "adresse" ...

Remarque : identifie veut dire qu'a partir de tel attribut "A" on peut trouver qu'un seul tuple, donc on peut identifier le tuple !
Dans ce cas, on dis que "A" est une clé primaire, sinon candidate !

Exemple 2 !
personne(id, nom, prenom, telephone)

Si on laisse comme ça, on remarque qu'une personne peut avoir plusieurs numéro de téléphone, donc "id" n'identifie pas "telephone", car on peut trouver 2 ou plusieurs numéro de téléphone pour une seule personne donnée !
alors la, une décomposition serait la bienvenue !

personne(id, nom, prenom)
personne_phone(id, id_personne, telephone)

La cardinalité entre les deux relations est de "1:N" !

Voila, donc a toi de voir si la attributs que tu va sortir de ta relation mère vont engendrer des relations dont les cardinalités seraient "1:N" ou "1:1", si c'est "1:1", alors c'est pas la peine de faire sortir les attributs concerné de ta table initial !
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
3 juil. 2012 à 10:11
Merci Joos,

Je connais bien les relations entre les tables mais ceci ne s'applique pas dans mon cas.
En fait les données que je traite sont à chaque fois des lignes d'un tableau excel, uniques, et aucune relation ne peut être faite entre elles.
Si ce n'est qu'une ligne d'un tableau concerne forcément une année et une semaine particulière. Mais aucune dépendance entre les produits, les équipes ou toutes les autres données présentes.

Je n'ai pas réussi à trouver de solutions pour avoir des 0 sans faire appel à une autre table, ce qui est logique.

J'ai en revanche pu trouver une solution qui permet de remplir un autre tableau avec des 0.
En fait j'ai mon premier tableau r :

$r = array(
array(1,'AeRE',362),
array(1,'AeTM',569),
array(1,'CMT',6),
array(2,'AeRE',90),
array(2,'AeTM',55),
array(2,'ARD',20),
array(2,'CMT',4),
array(3,'AeRE',34),
array(3,'AeTM',51),
);

Et je fais deux boucles

for ($m=0;$m < $count_team;$m++)
{
	for ($k=0;$k < $count_product;$k++)
		{	

		if ($r[$row][0]==${team.$m} and $r[$row][1]==${product.$k})
		{	
			$s[$row+$offset][0]=${team.$m};
			$s[$row+$offset][1]=${product.$k};
			$s[$row+$offset][2]=$r[$row][2];
			$row++;
		} 
		else 
		{
			$s[$row+$offset][0]=${team.$m}; 
			$s[$row+$offset][1]=${product.$k}; 
			$s[$row+$offset][2]=0; 
			$offset++;
		}
		}
}


Si il y a match du nom de team et de product, il récupère la valeur, sinon il récupère 0 et fait un offset, ce qui permet par exemple d'avoir s[8][2] = r[6][2] pour un offset de 2 et donc de remplir un tableau plus grand que le tableau initial =)
0
aladin07 Messages postés 277 Date d'inscription vendredi 13 avril 2012 Statut Membre Dernière intervention 30 septembre 2012 30
3 juil. 2012 à 02:30
Alors ma solution est la suivante:

<?php

// Ta liste des COUNT, j'assume qu'elle est de cette manière
$list = array(
	'1 AeRE 362 ',
	'1 AeTM 569 ',
	'1 CMT 6 ',
	'2 AeRE 90 ',
	'2 AeTM 55 ',
	'2 ARD 20 ',
	'2 CMT 4 ',
	'3 AeRE 34 ',
	'3 AeTM 51 '
	);

// Liste des produits
$produits = array('AeRE', 'AeTM', 'ARD', 'CMT');
$nbr_produits = count($produits);

// Nombre d'équipes
$equipes = 3;

$complete = array();
for($i=0, $j=0 , $v=1; $i < $equipes * $nbr_produits; $i++, $j++)
{	
	// Si l'équipe n'est pas présente dans le tableau on la crée
	// puis on associe à l'equipe 4 produits par defauts autant
	// qu'index et 0 comme nombre d'articles
	if( ! isset($complete[$v]))
	{
		$complete[$v] = array_combine($produits, array_fill(0, 4, 0));
	}
	
	
	if(isset($list[$j]) AND preg_match('~(?:['.$v.'])[\s+]([a-z]+)[\s+]([0-9]+)[\s+]$~i', $list[$j], $matches))
	{
		$article = $matches[1];
		$nombre = $matches[2];
		$complete[$v][$article] = (int)$nombre;
	}
	else $j--;
	
	! (($i+1) % $nbr_produits) AND $v++;
	
}


Donc mantenant tu as: $complete[1]['AeRE'] qui affiche 362 et $complete[3]['CMT'] qui affiche 0

J'espère que ça t'as aidé.
0
mtardieu Messages postés 15 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
3 juil. 2012 à 10:13
Merci pour ta solution aladin, je pense que c'est très efficace, mais j'aurais du mal à expliquer certaines parties, notamment celle ci :
if(isset($list[$j]) AND preg_match('~(?:['.$v.'])[\s+]([a-z]+)[\s+]([0-9]+)[\s+]$~i', $list[$j], $matches))


Je dois en effet livrer un code simple et compréhensible, donc j'ai trouvé une autre solution qui consiste à faire ceci :
for ($m=0;$m < $count_team;$m++)
{
	for ($k=0;$k < $count_product;$k++)
		{	

		if ($r[$row][0]==${team.$m} and $r[$row][1]==${product.$k})
		{	
			$s[$row+$offset][0]=${team.$m};
			$s[$row+$offset][1]=${product.$k};
			$s[$row+$offset][2]=$r[$row][2];
			$row++;
		} 
		else 
		{
			$s[$row+$offset][0]=${team.$m}; 
			$s[$row+$offset][1]=${product.$k}; 
			$s[$row+$offset][2]=0; 
			$offset++;
		}
		}
}

Si il y a match du nom de team et de product, il récupère la valeur, sinon il récupère 0 et fait un offset, ce qui permet par exemple d'avoir s[8][2] = r[6][2] pour un offset de 2 et donc de remplir un tableau plus grand que le tableau initial =)

Je pense que c'est plus simple et plus facile à expliquer.

Merci encore de votre aider.
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
Modifié par mpmp93 le 3/07/2012 à 13:38
Bonjour,

Toujours pas eu votre mail en MP...

Ma classe HTML()

$Html->setTheadValues(array('AeRE','AeTM','CMT','ARD')); 
$values = array( 
array(1,'AeRE',362.3), 
array(1,'AeTM',569.05), 
array(1,'CMT',6), 
array(2,'AeRE',90), 
array(2,'AeTM',55), 
array(2,'ARD',20), 
array(2,'CMT',4), 
array(3,'AeRE',34), 
array(3,'AeTM',51), 
); 
// $Html->setZeroValue('0'); 
$Html->setTableValues($values); 
// $Html->setTdFormat('%01.2f'); 
$Html->table();


vous sors ceci:

<table><thead><tr><td/><td>AeRE</td><td>AeTM</td><td>CMT</td><td>ARD</td><td>TOT</td></tr></thead><tbody><tr><td>1</td><td>362.3</td><td>569.05</td><td>6</td><td> </td><td>937.35</td></tr><tr><td>2</td><td>90</td><td>55</td><td>4</td><td>20</td><td>169</td></tr><tr><td>3</td><td>34</td><td>51</td><td> </td><td> </td><td>85</td></tr></tbody><tfoot><tr><td>CUMUL</td><td>486.3</td><td>675.05</td><td>10</td><td>20</td><td>1191.35</td></tr></tfoot></table>

Une table en données croisées avec des cases vides à la place des zéros

Variante:

$Html->setZeroValue('0'); 
$Html->setTableValues($values); 
// $Html->setTdFormat('%01.2f'); 
$Html->table();


vous sors ceci:

<table><thead><tr><td/><td>AeRE</td><td>AeTM</td><td>CMT</td><td>ARD</td><td>TOT</td></tr></thead><tbody><tr><td>1</td><td>362.3</td><td>569.05</td><td>6</td><td>0</td><td>937.35</td></tr><tr><td>2</td><td>90</td><td>55</td><td>4</td><td>20</td><td>169</td></tr><tr><td>3</td><td>34</td><td>51</td><td>0</td><td>0</td><td>85</td></tr></tbody><tfoot><tr><td>CUMUL</td><td>486.3</td><td>675.05</td><td>10</td><td>20</td><td>1191.35</td></tr></tfoot></table>

la même table avec les cases vides remplacées par des zéros

et variante:

$Html->setZeroValue('0'); 
$Html->setTableValues($values); 
// $Html->setTdFormat('%01.2f'); 
$Html->table();


vous sors ceci:

<table><thead><tr><td/><td>AeRE</td><td>AeTM</td><td>CMT</td><td>ARD</td><td>TOT</td></tr></thead><tbody><tr><td>1</td><td>362.30</td><td>569.05</td><td>6.00</td><td>0.00</td><td>937.35</td></tr><tr><td>2</td><td>90.00</td><td>55.00</td><td>4.00</td><td>20.00</td><td>169.00</td></tr><tr><td>3</td><td>34.00</td><td>51.00</td><td>0.00</td><td>0.00</td><td>85.00</td></tr></tbody><tfoot><tr><td>CUMUL</td><td>486.30</td><td>675.05</td><td>10.00</td><td>20.00</td><td>1191.35</td></tr></tfoot></table>

toujours la même table, mais avec les données formatées

Si vous me contactez pas, pas de code....

A+
0
aladin07 Messages postés 277 Date d'inscription vendredi 13 avril 2012 Statut Membre Dernière intervention 30 septembre 2012 30
Modifié par aladin07 le 3/07/2012 à 14:04
Alors pour l'explication de if(isset($list[$j]) AND preg_match('~(?:['.$v.'])[\s+]([a-z]+)[\s+]([0-9]+)[\s+]$~i', $list[$j], $matches))

si list[j] existe et :

// (?: ) trouve sans compter

(?:['.$v.']) trouve $v (qui peut etre 1, 2 ou 3 sans le compter dans les résultats,

[\s+] suivi d'un espace ou plus

// ( ... ) à compter dans les résutltats

([a-z]+) puis un caractère ou plus à compter dans les resultats

[\s+] suivi d'un espace ou plus

([0-9]+) enusite un chiifre (le 362) à compter

// $ veut dire à la fin
[\s+]$ il y a une erreur ça devrait être [\s*]$ qui veut dire, puis rien ou un espace ou plus à la fin

Donc pour résumer:
Trouve $v sans le compter suivit d'un espace ou plus suivit d'une chaine de caractère à compter suivit d'un espace ou plus suivit d'un chiffre à compter puis des espaces ou rien à la fin

Donc les résultats seront:
$matches[0] toute la phrase
$matches[1] premier résultat compté (ex: AeRE)
$matches[2] deuxième résultat compté (ex: 362).

Le scripte fait $equipe x nbr_produits tour (12 ici) pour remplire tout le tableau, mais on a seulement 9 dans notre liste actuelle, on verra comment on va faire pour ça.

La première partie est expliqué dans les commentaires dans le code.

Puis si $list[$j] existe ($list[11] n'existe pas) et qu'on trouve le produit qui concerne l'équipe $v (par exemple au debut c'est AeRE avec 362, puis dans le dexième tour, AeTM avec 59 mais 2 AeRE 90 ne sera pas compté parce qu'il y a 2 $v est 1), s'il la trouve alors:
$complete[$v][$produit] (produit trouvé, qui est AeRE) = $nombre (362)
voilà on a changé la premiìere valeur on incrémente i et j et on continue.

Si le preg_match ne trouve pas ce qu'il veut, par exemple 3 CMT 0 il décremente le $j pour qu'il reste stable, donc le i sera à la position 10 alors que le j sera à 8, comme ça on gardera la liste à la même ligne avec la liste complète.

Maintenant pour ! (($i+1) % $nbr_produits) AND $v++;

Si ($i+1) modulo $nbr_roduit est ègale à 0 incrémenter $v.

$i+1 parce que $i commence de 0 à 11, on veut de 1 à 12 pour avoir notre modulo. Donc si le reste de la division de i+1 sur nbr_produit = 0 incrémenter $v, comme ça on aura v=1 puis 2 et 3.

Avec ce scripte tu peux ajouter d'autres produits et augmenter le nombre d'équipes facilement sans qu'il n'y ait d'erreurs.

Si le scripte t'aide et tu trouve qu'il est compréhensible (je crois maintenant que ça l'est) utilise le, je crois que c'est la meilleur solution. Sinon tu as apprit un peut de PHP :)

Et merci tu m'as donné une idée, je vais créer des tutorieaux du RegEx (preg_match() preg_replace() ...etc) dans mon blog parce que c'est TRÈS utile pour l'extraction, pour le filtrage et beaucoup d'autres choses.
0
zolani2 Messages postés 1 Date d'inscription mardi 3 juillet 2012 Statut Membre Dernière intervention 3 juillet 2012
3 juil. 2012 à 14:23
Je plussoie ;)
Les expressions régulières c'est très utile

@mtardieu : je te conseille de lire ce tuto sur les expressions régulières
c'est très bien fait et ça te sera utile sûrement
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/916990-les-expressions-regulieres-partie-1-2

Bon courage !
0

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

Posez votre question
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 3/07/2012 à 11:54
Salut !

Y a forcement une relation logique entre les données de ta table initial !

C'est avec PHP que tu dois importer ton fichier excel, qui se chargera pour chaque ligne, d'insérer chaque infos dans sa table, tout en créant les relations entre elles !

Si t'arrive pas a trouver de relation entre les données, alors détaille nous le contenu de ta table d'origine, et peut être qu'on pourra t'aider !

Mettez en résolu quand c'est résolu -.- ...
0
Si on ne s'intéresse qu'à des produits et teams bien définis :
SELECT
res.ref,
team.ref,
COUNT( 1 ) nb_article
FROM (
SELECT 'AeRE' ref UNION
SELECT 'AeTM' ref UNION
SELECT 'CMT' ref UNION
SELECT 'ARD' ref
) product
INNER JOIN (
SELECT 'AB1' ref UNION
SELECT 'AB2' ref UNION
SELECT 'PNE' ref
) team ON 1
LEFT JOIN article_database
ON
product.ref = article_database.Product
AND article_database.Team = team.ref
GROUP BY res.ref, team.ref
--------------------------
Si on s'intéresse à toute combinaison de produits connus et Team connus :
SELECT
res.ref,
team.ref,
COUNT( 1 ) nb_article
FROM (
SELECT DISTINCT article_database.Product FROM article_database
) product
INNER JOIN (
SELECT DISTINCT article_database.Team FROM article_database
) team ON 1
LEFT JOIN article_database
ON
product.ref = article_database.Product
AND article_database.Team = team.ref
GROUP BY res.ref, team.ref
0