Bonjour tout le monde !

J'ai 3 tables que je souhaiterais joindre, respectivement membre, parrain, commande

ci-dessous :

table 'membre'

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
 
CREATE TABLE `membre` (
  `id` int(11) NOT NULL,
  `pseudo` varchar(80) NOT NULL,
  `pass_md5` text NOT NULL,
  `nom` varchar(80) NOT NULL default '',
  `prenom` varchar(80) NOT NULL default '',
  `adresse` text NOT NULL,
  `cp` text NOT NULL,
  `ville` text NOT NULL,
  `email` varchar(80) NOT NULL default '',
  `valide` varchar(4) NOT NULL,
  `newsletter` varchar(4) NOT NULL,
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
table 'parrain'

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
CREATE TABLE `parrain` (
  `id` int(11) NOT NULL auto_increment,
  `parrain` varchar(80) NOT NULL default '',
  `filleul` varchar(80) NOT NULL,
  `valide` varchar(4) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
et table 'commande'

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
 
CREATE TABLE `commande` (
  `id` int(11) NOT NULL auto_increment,
  `amount` varchar(11) NOT NULL default '',
  `membre` varchar(80) NOT NULL default '',
  `nom` varchar(80) NOT NULL default '',
  `adresse` varchar(120) NOT NULL default '',
  `cp` varchar(12) NOT NULL default '',
  `ville` varchar(80) NOT NULL default '',
  `tel` varchar(40) NOT NULL default '',
  `email` varchar(80) NOT NULL default '',
  `comments` text NOT NULL,
  `active` varchar(4) NOT NULL default '',
  `date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 
 
) ENGINE=MyISAM;
Dès lors je souhaiterais obtenir le [1] nombre de filleuls par membre à partir de la table 'parrain' où parrain.parrain = membre.pseudo et le [2] total des gains versés pour chaque membre à partir de la table 'commande' où commande.membre = membre.pseudo

jusque là tout me paraît clair ...

De ce fait, voici ma requête pour afficher [1] et [2] avec une triple jointure telle que :

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
39
 
 
$select = mysql_query("SELECT membre.id,
.pseudo,membre.nom,membre.prenom,membre.adresse,membre.cp,membre.ville,membre.email,membre.date,parrain.parrain,parrain.valide,commande.valide, count(*) AS nombre, sum(commande.amount) AS somme FROM membre
 
			  LEFT JOIN parrain ON membre.pseudo = parrain.parrain
 
			  LEFT JOIN commande ON commande.membre = membre.pseudo
 
 
 
			 GROUP BY membre.pseudo 
			 ORDER BY nombre desc") 
			 or exit(mysql_error() . "<br/>$select");
 
	$row = mysql_query($select);
        $nombre = $row['nombre'];
	$somme = $row['somme'];
 
while($row = mysql_fetch_assoc($select)) 
	{
 
	$fi_to = 0;
	$so_to = 0;
 
        $fi= $row['nombre'];
        $so= $row['somme'];
 
        $fi_to += $fi;
        $so_to += $so;
 
echo' membre == ".$row['pseudo']." ';
echo'<br>';
echo' Gains totaux == ".$so_to." ';
echo'<br>';
echo' filleuls == ".$fi_to." ';
echo' <br>';
 
}
Le problème ? .. et là ça se complique ...

Dès que le total des enregistrements à additionner pour obtenir les gains totaux par membre dans la table 'commande' est supérieur à 2, les résultats sont faussés.

Exemple avec les enregistrements du membre Suzanne :

table 'commande'

membre | amount |

suzanne | 1100|
suzanne | 800 |
brigitte | 2000 |
Suzanne | 400 |

Ma requête devrait me retourner 2300 (1100+800+400) mais au lieu de cela, elle multiplie le résultat par je ne sais quelle nombre (sûrement logique) et multiplie dès lors le nombre de filleuls par membre (ici ceux de suzanne) par le nombre des enregistrements de suzanne dans la table 'commande' ( Dans l'exemple ci-dessus : 3)

Au lieu de m'afficher distinctement le nombre de filleuls et les gains totaux perçus ... Pour faire simple ça merde !

Merci de votre aide et de l'attention que vous porterez à ce post ++