Bonjour à tous !

Je me permets de poster ce topic suite à un problème d'addition (sum) ... grr

J'ai 3 tables (nommons-les table_membre, table1 et table2) dont voici les structures, ci-dessous :

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
 
--
-- Structure de la table `table_membre`
--
 
CREATE TABLE IF NOT EXISTS `table_membre` (
  `id` int(11) NOT NULL auto_increment,
  `champ1` varchar(80) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
 
--
-- Contenu de la table `table_membre`
--
 
INSERT INTO `table_membre` (`id`, `champ1`) VALUES
(1, 'Angelik');

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
 
--
-- Structure de la table `table1`
--
 
CREATE TABLE IF NOT EXISTS `table1` (
  `id` int(11) NOT NULL auto_increment,
  `champ1` float NOT NULL,
  `champ2` varchar(80) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
 
--
-- Contenu de la table `table1`
--
 
INSERT INTO `table1` (`id`, `champ1`, `champ2`) VALUES
(1, 50, 'Angelik'),(1, 30, 'Angelik'),(1, 10, 'Angelik'),(1, 50, 'Angelik');

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
 
--
-- Structure de la table `table2`
--
 
CREATE TABLE IF NOT EXISTS `table2` (
  `id` int(11) NOT NULL auto_increment,
  `champ1` float NOT NULL,
  `champ2` varchar(80) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
 
--
-- Contenu de la table `table2`
--
 
INSERT INTO `table2` (`id`, `champ1`, `champ2`) VALUES
(1, 20, 'Angelik'),(1, 20, 'Angelik'),(1, 10, 'Angelik'),(1, 5, 'Angelik');
...dans lesquelles je stocke mes valeurs dans leur champ respectif (nommons-le champ1 pour les 2 tables (table1 et table2), admettons 4 lignes pour chacune de ces tables avec les valeurs suivantes :

50,30,10,50 ==> pour table1, champ1

et

20,20,10,5 ==> pour table2, champ1

Lors de ma requête, je souhaite additionner ces 4 valeurs (pour chaque table) qui, somme toute vraisemblance, devrait nous donner 140 pour table1 et 55 pour table2

Ainsi, je fais (naïvement) :

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
 
$search = mysql_query("SELECT table_membre.id, SUM(table1.champ1) AS valeur1, SUM(table2.champ1) AS valeur2
 
		FROM table_membre
 
		LEFT JOIN table1 ON table_membre.champ1 = table1.champ2
 
		LEFT JOIN table2 ON table_membre.champ1 = table2.champ2
 
		WHERE table_membre.champ1 = '$login'
 
		GROUP BY table_membre.id") or die ("ERROR:" . mysql_error());
		$row = mysql_num_rows($search);
 
 
	$result1 = $row['valeur1'];
 
	$result2 = $row['valeur2'];
 
 
			while ($row = mysql_fetch_array($search)) {
 
echo"result1 == ".$row['valeur1']."<br>";
echo"result2 == ".$row['valeur2']."<br>";
 
}
Ce qui se passe est assez logique (quoique...) et ...

result1 pour table1 me donne 560 au lieu de 140 avec le calcul suivant : ((50+30+10+50)*4) ==> 4 étant le nombre d'enregistrements pour table2

et

result2 pour table2 me donne 220 au lieu de 55 avec le calcul suivant : ((20+20+10+5)*4) ==> 4 étant le nombre d'enregistrements pour table1 cette fois ...

De ces résultats, je me dis "tiens, je vais mettre un DISTINCT" dans ma requête tel que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SUM(DISTINCT table1.champ1) AS valeur1, SUM(DISTINCT table2.champ1) AS valeur2
(pas folle...croyais-je)

mais là ... L'addition, qui semblait correcte au premier abord, exclut du calcul les doublons ='''''(

donc pour result1, j'ai 90au lieu de 140 (50 étant enregistré 2 fois)

et pour result2, j'ai 35au lieu de 55 (20 étant enregistré 2 fois aussi)


CONCLUSION :

Sans modifier la structure de ma requête (j'ai de bonnes raisons à cela, croyez-moi) est-il possible de pallier à ce problème ? y a t-il une astuce ou autre pour que le DISTINCT additionne également les doublons ? J'espère que oui ... et prends toutes les solutions !

Merci d'avance pour toute l'attention et l'intérêt que vous porterez à ce post

++