spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006
-
25 avril 2006 à 10:51
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006
-
7 juin 2006 à 20:21
Je suis webmaster dun site de tournoi en ligne sur le jeu vidéo de football PES 5 et jaimerais créer une rubrique STATS en exploitant les fonctions de calcul de Mysql et PHP.
Je m'explique...
Je veux utiliser le système de base de données Mysql couplé à PHP pour :
1/ Après chaque match joué , je rentre le score du match dans ma base de données (table Match) et mon site se met à jour dynamiquement ( ex : le joueur1 gagne 2-0 contre le joueur2 donc les stats de victoires de joueur1 augmentent dans son profil)
2/ Une page duel qui permettrait de comparer les résultats entre 2 joueurs grâce à la base de données Match sur cette forme là :
Voici les tables que je pense utiliser pour ma base de données avec leur principaux champs :
Mes questions sont :
1/ Quelle est la meilleure stratégie pour un tel projet ? Est ce que mes bases sont bien construites ou doit je faire plus simple (évitez les doublons ?) ?
2/ Comment gérer les calculs dans Mysql, notamment pour calculer si le nombre de Victoires ou Défaites (du style : si score1>score2 alors Victoire pour joueur1 et défaite pour Joueur2) et afficher les résultats sur une page de cette manière là :
affichage résultats par joueur :
affichage résultats par duel :
En espérant que vous ayez compris mes problèmes.
Je débute en php et sql, jai donc bcp de questions mais je suis motivé par ce projet donc si quelquun peux maider dans ma démarche, au moins en me donnant le résonnement à utiliser pour faire un tel projet
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 25 avril 2006 à 10:54
Je suis webmaster d'un site de tournoi en ligne sur le jeu vidéo de football PES 5 et j'aimerais créer une rubrique STATS en exploitant les fonctions de calcul de Mysql et PHP.
Je m'explique...
Je veux utiliser le système de base de données Mysql couplé à PHP pour :
1/ Après chaque match joué , je rentre le score du match dans ma base de données (table Match) et mon site se met à jour dynamiquement ( ex : le joueur1 gagne 2-0 contre le joueur2 donc les stats de victoires de joueur1 augmentent dans son profil)
2/ Une page duel qui permettrait de comparer les résultats entre 2 joueurs grâce à la base de données Match sur cette forme là :
Mes questions sont :
1/ Quelle est la meilleure stratégie pour un tel projet ? Est ce que mes bases sont bien construites ou doit je faire plus simple (évitez les doublons ?) ?
2/ Comment gérer les calculs dans Mysql, notamment pour calculer si le nombre de Victoires ou Défaites (du style : si score1>score2 alors Victoire pour joueur1 et défaite pour Joueur2) et afficher les résultats sur une page de cette manière là :
Je débute en php et sql, j'ai donc bcp de questions mais je suis motivé par ce projet donc si quelqu'un peux m?aider dans ma démarche, au moins en me donnant le résonnement à utiliser pour faire un tel projet?
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 25 avril 2006 à 14:27
Bonjour, je pense que tes tables sont males construites. Il faut en effet éviter les doublons et séparer les données non intéressantes.
Mon exemple :
Joueurs
ID | Nom | Prénom | Nationalite | Pseudo
Equipes (un joueur peut donc posséder plusieurs équipes, comme dans ton exemple)
ID | Nom | Joueur_ID
Match
ID | Tournoi_ID | Date | Equipe1_ID | Score1 | Equipe2_ID | Score2
Tournoi
ID | Nom
etc...
Il me semble important qu'au moment ou tu inseres un nouveau resultat de match que ca soit le php qui vérifie qui a gagné et mette à jour ces informations
Par exemple, plutot que de refaire plein de calculs, on peut rajouter des colonnes pour chaque équipe genre :
Victoires | Défaites | Nuls
colonnes mises à jour par une requete php suivant le vainqeur/perdant...
Tu peux ainsi recouper tes informations dans beaucoup de sens et effectuer un maximum de statistiques...
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 25 avril 2006 à 15:43
Effectivement je pense que mes bases sont mal construites et je vais m'appuyer sur ta structure .
Je vais donc créer en plus une table Equipes.
mais je ne comprends pas pourquoi il y a dans cette table le champ Joueur_ID car cela voudrait dire que je dois rentrer toutes les combinaisons de joueurs/équipes dans cette table ???
Ne vaut il pas mieux intégrer le champ Joueur_ID dans la Table Match comme ceci :
Match
ID | Tournoi_ID | Joueur1_ID | Equipe1_ID | Score1 | Score2 | Equipe2_ID | Joueur2_ID |
Cette table Match aurait donc 5 clés étrangères si j'ai bien compris...
Le 2eme point concernant le traitement des resultats avec le php qui vérifie qui à gagné ou perdu ainsi que les colonnes mise à jour m'intéressent fortement mais pourrait tu être plus précis en donnant des exemples STP?
Car perso, je croyais que ces calculs devaient être réalisés dans SQL...
Merci
PS: j'ai l'impression que ce projet va m'occuper un bon bout de temps...
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 25 avril 2006 à 20:19
Pour les équipes : Quelles sont les possibilités ? Une équipe n'appartient pas à un joueur ?
Pour les calculs : Quand tu rentres les résultat d'un match sur ton site web, le php va demander à SQL de sauver les informations dans ta base, il va aussi demander (suivant le score) à augmenter un des compteurs (victoire/défaite/nul) de chaque équipe, etc... Il lance simplement plusieurs mises à jour à la suite. Ca permet d'évitre trop de calculs pour chaque affichage
Vous n’avez pas trouvé la réponse que vous recherchez ?
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 25 avril 2006 à 20:34
Pour les équipes :
Un joueur n'a pas d'équipe fixe. Exemple : Pour le tournoi 01 et le tournoi 06, le joueur Damyx aura l'équipe Lyon mais pour le tournoi 02 c'est le joueur Sebastien qui aura Lyon. Chaque joueur peut avoir plusieurs équipes par tournoi : Pour le tournoi 01, le joueur damyx a l'équipe Lyon et PSG par exemple....
Est ce que çà à une incidence sur la composition des tables équipes?
Ce qui donnerait :
Table Equipes (un joueur peut donc posséder plusieurs équipes, comme dans mon exemple)
ID | Nom | Joueur_ID
Ce qui reviendrait à créer autant d'ID Equipe que de combinaison Equipe/Joueur.
Exemple : Table Equipes
ID | Nom | Joueur_ID
1 | Lyon | 1 (Damyx)
2 | Lyon | 4 (Sebas)
3 | Lyon | 12 (Guillaume)
4 | PSG | 4 (Sebas)
La table Match deviendrait (exemple):
Match ID | Tournoi_ID | Equipe1_ID | Score1 | Equipe2_ID | Score2
1 | 1 | 1 | 2 | 4 | 0
avec 3 clés étrangères? La table match serait rempli qu'avec des chiffres du coup.... pas évident à rentrer tous çà !
Pour les calculs, la requête php m'a l'air assez complexe... Peux tu me donner un exemple du code ?
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 26 avril 2006 à 01:43
Alors :
Plus tu veux syntetiser, plus il y aura de "chiffres incomprehensibles", c'est pour cela qu'il te faut une interface web pour remplir tout ca de manière compréhensible...
Ta table équipe perd la notion de tournoi (Damyx possède Lyon pendant quel tournoi ?)
Donc plutot Equipes identiques, mais sans Joueur_ID, et une nouvelle table que je vais appeler Formations :
Formation
ID | Joeuur_ID | Equipe_ID |Tournoi_ID
Permettant un maximum de possibilités.
Pour les résultats, la table match contient bien ce que tu as indiqué.
Pour le code, je vais te donner les differentes requetes et l'algo en gros :
Tu crées un match Lyon-PSG 2-0 (comme dans ton message ci-dessus, si j'ai bien suivi) :
Insérer Match => INSERT INTO Match (Tournoi_ID, Equipe1_ID, Score1, Equipe2_ID, Score2) VALUES (1, 1, 2, 4, 0)
On considère les ID en incrément automatique
Puis, comme Lyon a gagné, => UPDATE Equipes SET Victoire = Victoire + 1 WHERE ID = 1 (ID de Lyon)
Puis, comme PSG a perdu, => UPDATE Equipes SET Defaite = Defaite + 1 WHERE ID = 4 (ID de PSG)
Maintenant, souhaites-tu garder tes scores par equipe ou par tournoi ? Si c'est par eqiupe, fais comme ca, par tournoi, il faut alors deplacer tes colonnes Victoire/Defaite/Nul dans la table Formations, permettant de faire les calculs de Victoire/Defaite/Nul par equipe, par joueur et/ou par tournoi...
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 26 avril 2006 à 10:18
En fait, je souhaite garder les resultats (scores) par Joueur pour savoir si le joueur Damyx a plus de victoires, marque plus de but que le joueur Sebastien. Le but de cette base de données est que je puisse calculer automatiquement les profil Victoires/Nuls/Défaites, buts marqués etc... de Tous les joueurs... Après si je peux faire des filtres par équipes c'est du bonus, mais le plus important sont les Joueurs... Donc est ce que çà remet en cause la construction de la table Match car il n'y a pas le champ Joueur ID?
Pour les UPDATE, ya t'il un moyen pour qu'ils soient fait automatiquement. C'est à dire lorsque je rentre le résultat dans ma table match, il puisse l'analyser (score1<score2 donc défaite Equipe1)et incrémenter de +1 la colonne défaite de l'Equipe1. ?? Quel fonction faut il utiliser dans ce cas? Ou sinon faut il réecrire toutes les requête d' UPDATE après chaque match?
Merci vraiment pour ta patience... Je progresse dans mon résonnement...
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 5 juin 2006 à 19:12
De retour sur mon projet... Et je me rends compte que c'est très compliqué ces langages SQL, php pour un pauvre webdesigner comme moi... Mais je ne desespère pas et j'ai donc avancé sur mes bases SQL :
Voici les principales tables avec leurs principaux champs :
TABLE Joueur :
id / nom_joueur / description / photo
TABLE Equipe
id/ nom_equipe / flag
TABLE Tournoi
id/ nom_tournoi / jeux / date
TABLE Elimination (ex :poule, 1/4 finale, 1/2 etc)
id/ nom_elimination
TABLE Matchs : (dans cette table ya que des chiffres <!--emo&:wacko:--><!--endemo--> )
id/ tournoi_id / joueur_id / equipe1_id / score1 / score2 / equipe2_id / joueur2_id / elimination_id
La TABLE Matchs étant la clé de la Matrice <!--emo&:p--><!--endemo--> car il ya plusieurs clés étrangères..
Et c'est là mon problème... Je n'arrive pas avec une requête à lire les données de ma table MATCHS .
J'arrive à faire une jointure (avec les champs communs "joueur_id" "equipe1_id" mais impossible de faire la jointure avec les champs "joueur2_id et "equipe2_id"...
En fait le problème c'est que ma table MATCHS à des clés étrangères (ex: joueur1_id et joueur2_id) qui font référence à la même table JOUEUR ( et donc théoriquement devrait se joindre sous la forme WHERE matchs.joueur1_id=joueur.id AND matchs.joueur2_id=joueur.id )....mais çà marche pas...
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 5 juin 2006 à 23:56
Merci Mindiell... effectivement j'ai pu enfin pouvoir lire mes données de la table MATCHS grâce à une requête extra longue :
SELECT j1.nom_joueur, e1.nom_equipe, e2.nom_equipe, j2.nom_joueur, score1, score2, nom_tournoi, nom_elimination
FROM Matchs, Joueur AS j1, Joueur AS j2, Equipe AS e1, Equipe AS e2, Tournoi, EliminationWHERE Matchs.joueur1_id j1.id AND Matchs.joueur2_id j2.id AND Matchs.equipe1_id = e1.id AND Matchs.equipe2_id = e2.id AND Matchs.tournoi_id = Tournoi.id AND Matchs.elimination_id = Elimination.id
2 problèmes se heurtent maintenant à moi :
1/ créer un formulaire d'insertion de données dans la table matchs (pour les autres tables no problem jy suis arrivé)
2/ Quel est la technique à utiliser pour comptabiliser les victoires et défaites de chaque joueur. Je pense qu'il faut faire une requete de SELECTdans la table matchs puis trier les resultats mais comment faire le calcul des victoires (if score1<score2) de chaque joueur...
Si tu peux m'aider sur ces points.... J'avance doucement mais sans ton aide j'aurais surement abandonné...
merci
Mindiell
Messages postés558Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 5 septembre 20071 6 juin 2006 à 09:05
Je reprends ta requete :
SELECT j1.nom_joueur, e1.nom_equipe, e2.nom_equipe, j2.nom_joueur, score1, score2, nom_tournoi, nom_elimination
FROM Matchs, Joueur AS j1, Joueur AS j2, Equipe AS e1, Equipe AS e2, Tournoi, Elimination
WHERE
Matchs.joueur1_id j1.id AND Matchs.joueur2_id j2.id AND
Matchs.equipe1_id e1.id AND Matchs.equipe2_id e2.id AND
Matchs.tournoi_id Tournoi.id AND Matchs.elimination_id Elimination.id
Puis je vire tout sauf l'id du joueur qui m'intéresse et je regroupe les résultats en l'utilisant. Je fais un COUNT dessus en précisant qu'il faut que le score soit gagnant.
SELECT j1.id, count(j1.id)
FROM Matchs, Joueur AS j1, Joueur AS j2, Equipe AS e1, Equipe AS e2, Tournoi, Elimination
WHERE
Matchs.joueur1_id j1.id AND Matchs.joueur2_id j2.id AND
Matchs.equipe1_id e1.id AND Matchs.equipe2_id e2.id AND
Matchs.tournoi_id Tournoi.id AND Matchs.elimination_id Elimination.id
AND Matchs.score1 > Match.score2
GROUP BY j1.id
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 6 juin 2006 à 19:41
Ya rien a dire t vraiment fort Mindiell ! par contre la longueur de la requête commence à me faire vraiment peur ! Par exemple j'ai adapté ton exemple pour selectionner le nb de victoires du joueur 1 et çà donne çà :
SELECT j1.id, count( j1.id ) AS V
FROM Matchs, Joueur AS j1, Joueur AS j2, Equipe AS e1, Equipe AS e2, Tournoi, EliminationWHERE Matchs.joueur1_id j1.id AND Matchs.joueur2_id j2.id AND Matchs.equipe1_id = e1.id AND Matchs.equipe2_id = e2.id AND Matchs.tournoi_id = Tournoi.id AND Matchs.elimination_id = Elimination.id AND Matchs.score1 > Matchs.score2 AND Matchs.joueur1_id = 1
GROUP BY j1.id
Le truc c'est que je ne sias pas comment jouer avec les tableaux php pour pouvoir présenter les resultats sur mes pages. (pages stats joueurs, duels, records).
Bon çà c'est une chose mais voilà maintenant que l'on passe aux choses sérieuses :
1/ insérer les données dans la table MATCHS grâce à un formulaire d'insertion d'enregistrements. As tu une idée sur la chose? Car j'ai essayé sous Dreamweaver (cf post précdent) mais j'ai je n'arrive toujours pas à afficher les equipe2_id et joueur2_id.....
2/ voilà les pages que je cherche à faire avec toutes ces données de la table matchs (j'ai illustrer mes pages pour que vous compreniez mes envies)
En gros : ce que je veux c'est que je puisse rentrer un résultat dans ma table MATCHS sous une forme simple (et non pas par phpadmin avec des 0/1/2/0 <!--emo&:p--><!--endemo--> ) puis que mes pages se mettent à jour dynamiquement ( çà c'est le vrai objectif!)
Donc voilà, je pense qu'il y a du boulot mais je ne sais pas comment et par où commencer avec les requ^tes.... <!--emo&:nonono:--><!--endemo-->
En espérant que mes pages-vignettes soit lisibles ....
a+ je l'espère...
spamyx
Messages postés9Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention 7 juin 2006 7 juin 2006 à 20:21
Ouf, j'ai réussi ENFIN à faire un formulaire d'insertion dans ma table MATCHS . Après des heures de bidouillage, j'y suis arrivé (je sais c'est bête mais je suis fièr de moi <!--emo&:thumbsup:--><!--endemo--> ). Voici mon code si çà intéresse : (juste le code du formulaire)
<!--c1-->
CODE
Maintenant va falloir attaquer les requ^tes de fou pour faire mes 3 pages (stats joueur / stats duels / stats record) ... Si quelqu'un veut s'y jeter.... moi je continue à progresser...<!--c2-->