Bonjour tout le monde !
J'ai 3 tables que je souhaiterais joindre, respectivement membre, parrain, commande
ci-dessous :
table 'membre'
table 'parrain'
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;
et table 'commande'
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;
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
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;
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 :
Le problème ? .. et là ça se complique ...
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>'; }
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 ++
![]()
Partager