Se connecter / S'enregistrer
Votre question

jointure mysql page en php [résolu]

Tags :
  • MySQL
  • Programmation
Dernière réponse : dans Programmation
14 Août 2007 11:57:37

bonjour

J'ai ouvert un forum phpBB, qui fonctionne comme un jeu: les membres du forum appartiennent à un groupe, et gagnent des points.

Je voudrais faire un tableau d'affichage des points gagnés par les membres, groupe par groupe.

J'ai une table "phpbb01_users" avec toutes les infos des membres: user_name, user_id, etc...

une autre table phpbb01_groups avec toutes les infos des groupes: groupname, group id, etc...

J'ai enfin une troisième table: phpbb01_membergroup qui met en face le group id et le user id.

On m'a dit qu'il fallait faire une jointure pour faire mon tableau. J'ai fait des recherches sur internet (et ça m'a mené à votre site) mais je n'ai pas trouvé la réponse précise à ce que je voudrais faire:

1) Un tableau avec le nom des membre, leur groupe, leur nombre de points, et en dessous le total des points du groupe.

2) Un récapitulatif avec juste le nombre de points du groupe.

J'ai bidouillé la requète suivante en php:


Citation :
echo "<table border='1' width='500'>
<tr><td>SERDAIGLES</td></tr><br>
<tr><td width='50%'>Noms</td><td width='50%'>Galions</td></tr>";

// Code Mysql + PHP

$re=mysql_query("select group_name, group_id from phpbb01_groups where group_id=4");
$n=mysql_num_rows($re);
for($i=0;$i<$n;$i++){
$group_name=mysql_result($re,$i,"group_name");
$group_id=mysql_result($re,$i,"group_id");




$re2=mysql_query("select user_id from phpbb01_user_group where group_id='$group_id'");
$n2=mysql_num_rows($re2);
for($i2=0;$i2<$n2;$i2++){
$user_id=mysql_result($re2,$i2,"user_id");



$re3=mysql_query("select username, user_points from phpbb01_users where user_id='$user_id'");
$n3=mysql_num_rows($re3);
for($i3=0;$i3<$n3;$i3++){
$username=mysql_result($re3,$i3,"username");
$user_points=mysql_result($re3,$i3,"user_points");

$re4=mysql_query("select SUM(user_points) as sumpoints from phpbb01_users ");
$n4=mysql_num_rows($re4);
for($i4=0;$i4<$n4;$i4++){
$sumpoints=mysql_result($re4,$i4,"sumpoints");


echo "<tr><td>$username</td><td>$user_points</td><td></td></tr>";


};



};echo "<table border='1' width='50%'><tr><td>TOTAL</td><td width='50%'>$sumpoints</td></tr>";
echo "</table>";
};
};


echo "</table>";


Ca marche pour afficher la liste des membres par groupe, mais par contre, je n'arrive pas à afficher la somme des points du groupe (ça m'affiche la somme total des points de tous les membres et en plus ça la répète à chaque ligne).

Est ce que quelqu'un pourrait m'aider à corriger et/ou compléter mon code pour que ça marche?

Merci d'avance!

Morgane

Autres pages sur : jointure mysql page php resolu

14 Août 2007 14:04:25

bonjour,
pour faire une jointure, il te suffit d'indiquer les tables à prendre en compte et la condition de jointure:
  1. select * from phpbb01_users, phpbb01_user_group, phpbb01_groups
  2. where phpbb01_users.user_id = phpbb01_user_group.user_id
  3. and phpbb01_user_group.group_id = phpbb01_groups.group_id

t'auras en sortie la totalité des colonnes des 3 tables, tu pourras prendre celles qui te sont nécessaires.
14 Août 2007 16:57:09

bonjour,

Merci pour ta réponse mais je me suis mal exprimée: je n'ai pas de difficulté pour faire apparaitre les colonnes avec le code que j'ai mis plus haut. Ce que je n'arrive pas, c'est à avoir le calcul automatique des points des groupes qui se fait en bas du tableau.

Je m'explique: j'ai fait mon beau tableau Style:

Maison Elève Nb de points
Serpentard Kevin 10
Serpentard Brenda 30
Serpentard Dylan 70

Si je veux je refais la même chose avec les autres maisons, etc... pour ça pas de pb.

Mais je n'arrive pas à mettre en bas du tableau une ligne:

TOTAL Serpentards = 110 points

Avec le code que j'ai mis plus haut, ça me met le total général de tous les groupes.

Bien sur avec seulement trois membres, comme dans mon exemple, c'est facile de faire le calcul à la main mais comme j'ai plus de membres, et comme les points changent tous les jours, je veux que les joueurs puissent venir consulter le tableau pour savoir combien de points ils ont gagné sans que je fasse le calcul à la main. C'est pour ça qu'à la fin j'ai mis la fonction SUM (user_points) et c'est ça qui ne marche pas dans ma jointure...

Et je voudrais aussi pouvoir faire un récapitulatif des points des groupes à un autre endroit du site, sans avoir à affficher le tableau.

Merci d'avance!

Morgane
Contenus similaires
14 Août 2007 17:04:51

tu n'as aucune jointure dans tes requetes!
tu commences par prendre l'ensemble des id des groupes, puis tu executes une requetes par id pour avoir le nom puis l'id des utilisateurs, ainsi de suite...

pour limiter la somme à un groupe donné, il suffit de rajouter une condition sur ce groupe:
  1. select SUM(user_points) as sumpoints from phpbb01_users, phpbb01_user_group
  2. where phpbb01_users.user_id = phpbb01_user_group.user_id
  3. and phpbb01_user_group.group_id = x


et c'est le fait de mettre plus d'une table dans la requete qu'on appelle jointure.
14 Août 2007 17:11:36

ok! merci beaucoup! j'essaie ça tout de suite!
et désolée pour le terme jointure lol... comme on m'a dit que c'est ce qu'il fallait faire, j'ai répété bêtement hihi...en fait une jointure permet de faire le tableau de manière plus simple (et plus élégante aussi...) que ce que j'ai fait moi, c'est bien ça? ou alors ma manière n'est pas bonne?

En tout cas merci beaucoup de ton aide!

Morgane

EDIT: Ca marche!

Je suis super contente, merci beaucoup!

J'ai encore une petite question: pour mon tableau des points, est ce qu'il est possible de programmer ma requète de façon à ce qu'elle m'affiche les points en ordre décroissant? (le membre qui a le plus de points en premier, etc...)

J'ai regardé sur mon bouquin mysql et j'ai essayé avec une fonction compare et l'instruction ksort, mais ça ne m'affiche rien sur ma page php...

bonne soirée à toi!

Morgane
a c 232 L Programmation
15 Août 2007 00:14:20

ORDER BY colonne DESC

à mettre à la fin de ta requête. (pour trier dans l'ordre ascendant, c'est ASC ou pas de mot clé)
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS