Une addition sélective... - PHP - Programmation
Marsh Posté le 18-01-2008 à 16:21:33
A mon avis, il faudrait rajouter dans ta table les colonnes : id_equipe, is_leader
Ensuite avec ton SQL, tu requetes pour avoir :
Peut être y-a-til de meilleure solution...
Marsh Posté le 18-01-2008 à 21:03:53
Par facilité, je n'ai pas besoin des points de l'équipe seule, mais uniquement de l'équipe entière.
J'ai donc le code suivant:
Code :
|
Mais je ne vois toujours pas comment arriver à avoir le résultat de l'équipe complète DE CHAQUE JOUEUR!
Je sais avoir les points individuel de chaque joueur et de là, je sais avoir le résultat de l'équipe complète. Cela se termine +/- comme ceci:
Code :
|
Mais comment permettre l'affichage dans $equipecomplete et que cela corresponde bien à chaque id_joueur??? Je pensais aux switch mais je ne vois pas comment m'y prendre...
Merci d'avance!
Marsh Posté le 19-01-2008 à 11:57:35
En fait, tu peux obtenir ton résultats seulement en SQL :
Table : joueurs
id_joueur nom id_groupe
1 michel 1
2 alain 1
3 pierre 1
4 jacques 2
Table : points
id_joueur points_perso date
2 50 10 janvier
3 30 11 janvier
1 40 9 janvier
3 10 13 janvier
1 20 14 janvier
2 40 14 janvier
4 50 15 janvier
Si tu fais un tout bête :
Code :
|
(Au passage il est judicieux de noter qu'il est préférable de faire un "INNER JOIN" que un "WHERE A = B" )
Tu obtiens :
nom sum( points_perso )
alain 90
jacques 50
michel 60
pierre 40
Maintenant si tu fais :
Code :
|
Tu obtiens :
nom sum( points_perso ) IDGROUPE equipe_complete
alain 90 1 190
jacques 50 2 50
michel 60 1 190
pierre 40 1 190
Explication :
Code :
|
Dans ce SQL, j'ai demandé 4 valeurs : nom, sum(points_perso), le champ id_groupe que j'ai rennomé en IDGROUPE (afin de ne pas le confondre avec le id_groupe de la sous-requête) et une valeur issue d'une sous-requête que je renomme en equipe_complete
Code :
|
Dans la sous requête, j'ai demandé la somme des points_perso aggrégé par id_groupe pour le id_groupe égal au IDGROUPE de l'id_joueur de la requête principale.
NB : La colonne IDGROUPE est indispensable et elle ne peut pas être placé aprés la sous-requête
En espérant avoir été assez clair...
Marsh Posté le 19-01-2008 à 14:45:51
Salut,
Tout d'abord, merci, parce que c'est balaise tout ce que tu racontes!
On avance, mais ce n'est pas tout à fait ça que je veux. C'est un peu plus compliqué.
Je m'explique...
Il faut bien visualiser la structure. c'est le principe d'une pyramide, en fonction du grade, les points changent. Plus on est en haut, plus on accumule les points.
Michel
/ \
Alain Marie
/ \ \
Pierre Steve Sophie
/ / \
jacques Marc Louis
/
Olivier
Voilà une situation possible.
Je voudrais donc avoir par exemple, les points de Michel, qui compteraient ses points perso + tous les points des gars qui sont en dessous.
Jacques n'aurait que ses points perso.
Sophie aurait ses points perso+ ceux de Marc Louis et Olivier.
Alain aurait ses points perso + ceux de Pierre Steve et Jacques.
etc.
La solution n'est elle pas de mettre des conditions?
Comment s'y prendre?
Merci de ne pas me laisser tomber!!!
Marsh Posté le 19-01-2008 à 18:26:50
Ce que je ferais :
Cela donne :
Code :
|
Marsh Posté le 20-01-2008 à 19:56:33
Tu pourrais aussi faire comme ça si tu n'ajoutes pas souvent des joueurs dans ta table :
19-Michel-0 |
dans ta table tu aurais
|
donc pour avoir les points de marie et de tous ceux qui sont en dessous de marie, tu additionnes simplement les points des joueurs joueurs dont "petit >= 1 et grand <= 10"
Le problème de cette façon de faire est que chaque fois que tu ajoutes un joueur dans ta liste, il faut recalculer toutes les valeurs de "petit" et "grand". Mais si tu ne dois pas souvent ajouter du monde, c'est bon
edit: en fait je pense que c'est assez facile d'ajouter quelqu'un mais que c'est plus chiant pour déplacer quelqu'un. Mais je n'ai jamais utilisé ce truc donc je ne sais pas vraiment
Marsh Posté le 27-01-2008 à 21:15:47
babasss a écrit : Ce que je ferais :
|
Salut babasss,
J'ai du mal à bien comprendre tout ton raisonnement...
En faisant comme ca, cela fonctionnera bien tant pour Alain que pour Marie?
Pour commencer, que dois-je mettre dans id_hierarchy? 1,2,3...? un chiffre différent pour chaque en commençant par un à celui qui se trouve au-dessus?
Pour le reste, j'ai copié ce que tu as fait, mais je n'arrive à rien afficher. Je dois modifier qqch?
Merci d'avance...
Marsh Posté le 28-01-2008 à 12:54:06
bingojm a écrit : |
Comme je le disais dans mon post : "un champ "id hierarchy" pour récupérer la personne au-dessus hiérarchiquement". Donc pour Michel tu mets 0, pour Marie tu mets l'id de Michel, pour Sophie tu mets l'id de Marie....
bingojm a écrit : |
Peut être le nom des champs et/ou le nom des tables sql qui ne correspondent pas entre ton modèle et le mien...
Marsh Posté le 18-01-2008 à 14:28:26
Salut à tous,
Je vais essayer de vous expliquer au mieux mon problème...
J'ai déjà créé 2 tables:
id_joueur nom prénom
1 dupont michel
2 durant alain
3 dufour pierre
idjoueur points_perso date
2 50 10 janvier
3 30 11 janvier
1 40 9 janvier
3 10 13 janvier
1 20 14 janvier
2 40 14 janvier
J'ai créé une requête pour avoir la somme des points de chaque joueur en faisant:
jusque là, pas de soucis.
J'ai donc:
Nom: Points perso:
Michel 60
Alain 90
Pierre 40
Sachant que Pierre fait partie de l'équipe de Alain et que Alain et Pierre font partie de l'équipe de Michel (une pyramide quoi), je voudrais arriver à additionner les points des membres de l'équipe (sans le chef d'équipe puis avec dans la colonne suivante)
Donc il me reste à faire ce qui est en rouge:
Nom: Points perso: Points équipe seule: Points équipe complète:
Michel 60 130 190
Alain 90 40 130
Pierre 40 40
je pense que je devrais avoir:
mais je ne sais pas du tout vers quel principe me diriger pour faire ce calcul...
Je pensais aux switch, mais je ne vois pas comment faire.
J'espère avoir été bien clair, mais pouvez-vous m'aider?