Problème de jointure de tables

Répondre
QuoiQues
le 27/02/2010 à 16:13
QuoiQues
Bonjour,
juste pour savoir si le nombre de tables est limité pour réaliser des jointures?
En effet,
Le code suivant fonctionne:
$req = mysql_query("SELECT DISTINCT tabsor.NometPrenom,SUM(tabcomp.points_compet) AS som_comp,tabtrim.TotalScol 
FROM sorlisting tabsor
JOIN competitions as tabcomp ON tabsor.id = tabcomp.id_lut
JOIN scolaire as tabtrim ON tabsor.id = tabtrim.id_lut
WHERE tabsor.CatAge='Benjamin 1' OR tabsor.CatAge='Benjamin 2' GROUP BY tabsor.NometPrenom
ORDER BY sum(tabcomp.points_compet) + tabtrim.TotalScol ASC");

Mais le fait d'ajouter une jointure me renvoit des erreurs dans les sommes de champs demandés.
Voici le code qui génère des erreurs:
$req = mysql_query("SELECT DISTINCT tabsor.NometPrenom,SUM(tabcomp.points_compet) AS som_comp,SUM(tabsta.nbjours) AS som_sta, tabtrim.TotalScol 
FROM sorlisting tabsor
JOIN competitions as tabcomp ON tabsor.id = tabcomp.id_lut
JOIN stages as tabsta ON tabsor.id = tabsta.id_lut
JOIN scolaire as tabtrim ON tabsor.id = tabtrim.id_lut
WHERE tabsor.CatAge='Benjamin 1' OR tabsor.CatAge='Benjamin 2' GROUP BY tabsor.NometPrenom
ORDER BY sum(tabcomp.points_compet) + tabtrim.TotalScol ASC");


Merci de m'aider
Merci et bravo !
QuoiQues
le 27/02/2010 à 17:28
QuoiQues
Bonjour et merci pour ta réponse.
En fait,
j'affiche un tableau avec les noms et la somme de points obtenus sur plusieurs compétitions et la somme des points obtenus lors des différents stages réalisés pour chaque nom ainsi que la somme des notes trimestrielles.
J'utilise le code suivant:
while ($donnees = mysql_fetch_array($req))  {
$nom = $donnees['NometPrenom'];
$pt_comp = $donnees['som_comp'];
$pt_sta = $donnees['som_sta'];
$pt_trim= $donnees['TotalScol'];
$pt_trim_dec = number_format($pt_trim, 2, ',', ' ');
$i=$i+1;

$TotGen = $pt_comp + $pt_sta + $pt_trim;

Je simplifie le <table> par echo:
[code]
echo $nom.'<br />';
echo $pt_comp.'<br />';
echo $pt_sta.'<br />';
echo $pt_trim_dec.'<br />';
echo $TotGen.'<br />';}[/code]
Dans la premiere requête, la somme des points de compétition est affichée correctement dans le tableau.
Avec la requête qui intègre les points de stages, les sommes des points des compétitions et de stages sont affichées mais erronnées.
Peux-tu m'aider?
Merci
Merci et bravo !
LA GLOBULE
le 27/02/2010 à 18:47
LA GLOBULE
Ta requête ne doit correspondre à ce que tu souhaites obtenir.

Pour t'aider, il va falloir nous expliquer ce que tu as en base, et ce que tu souhaites obtenir, le plus précisément possible.
QuoiQues
le 27/02/2010 à 21:28
QuoiQues
Je ne comprends pas pourquoi la première requête fait ce que je demande alors que la seconde est identique (mais avec la jointure stage en plus)ne marche pas.
Merci et bravo !
QuoiQues
le 28/02/2010 à 10:40
QuoiQues
Bonjour,
Je t'envois mes tables.
Juste pour te dire que si je fais ma requête sans la somme des compets, j'ai un bon affichage des somme de stages, et vice versa.
C'est quand je joins les 02 tables qu'il affiche un résultat erronné.
Merci pour ton soutien

Le wall:
http://www.lephpfacile.com/wall/wall-1856.php
Merci et bravo !
LA GLOBULE
le 03/03/2010 à 00:45
LA GLOBULE
Je ne comprend pas le role de la table stages :/

Sur le wall, tu parles d'un total de points gagnés au cours de stage, mais la table ne comporte pas de champs ressemblant à cela.
QuoiQues
le 03/03/2010 à 07:25
QuoiQues
Bonjour,
En fait "nbjours" correspond au nombre de jours le sportif a réalisé en stage. Un jour = 01 Point.
Il apparait dans la requête SUM(nbjours).

Merci pour ton aide.
Merci et bravo !
LA GLOBULE
le 08/03/2010 à 23:39
LA GLOBULE
Désolé de répondre si tard, mais :

mysql> select l.id, l.NometPrenom, sum(c.points_compet) as points_compet, sum(s.nbjours) as points_stages, sum(sc.TotalScol) as points_scolaire from listing as l left join competitions as c on c.id_sportif = l.id left join stages as s on s.id_sportif = l.id left join scolaire as sc on sc.id_lut = l.id group by c.id_sportif, s.id_sportif, sc.id_lut;
+-----+-------------+---------------+---------------+-----------------+
| id | NometPrenom | points_compet | points_stages | points_scolaire |
+-----+-------------+---------------+---------------+-----------------+
| 104 | Antoine | NULL | NULL | NULL |
| 38 | Pierre | NULL | NULL | 16.75 |
| 117 | Fred | NULL | 9 | NULL |
| 40 | Bob | 174 | 48 | 396 |
| 103 | Mike | 66 | 84 | 378 |
| 111 | Louis | 135 | 100 | 285 |
| 126 | Mario | 87 | 52 | 153 |
| 142 | Jacques | 21 | 20 | 39 |
+-----+-------------+---------------+---------------+-----------------+


Ce n'est pas bon ?
QuoiQues
le 09/03/2010 à 05:02
QuoiQues
Merci pour ta réponse.
Je teste et te dis si c'est bon.
Merci et bravo !
Répondre
LoadingChargement en cours