Obtention d'un résultat incorrect suite à un SUM
Bonjour tout le monde !
J'ai 3 tables que je souhaiterais joindre, respectivement membre, parrain, commande
ci-dessous :
table 'membre'
Code:
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:
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:
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:
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 ...:aie:
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 !:oops:
Merci de votre aide et de l'attention que vous porterez à ce post ++
:king: