PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 18-10-2015 16:43:14

eurofox66
Membre
Inscription : 18-10-2015
Messages : 2

Planté sur une requete Mysql PHP

Bonjour et pardonnez-moi si je suis un peu long :
(Je suis chez Free et donc en php 5.1 et pas de MySqli malheureusement !)

Je sollicite de l'aide svp pour terminer ma requête en Mysql pour un challenge interne à mon club de Tennis :
Je fais compléter une table 'Matchs' au moyen d'un formulaire d'enregistrements par la méthode POST
après une routine de calculs qui attribue un nombre de points selon le score en 2 sets ou en 3 sets.

J'ai donc 2 tables dans une base Mysql qui contiennent:

Table "Matchs" :
nomgagnant (varchar,30)
nomperdant (varchar,30)
pointsgagnant (tinyint,1)
pointsperdant (tinyint,1)

Table "Membres" :
nom (varchar,30)
nbmatchs (int,4)
nbpoints (int,4)

Voici la requete mysql qui alimente par des variables les valeurs des champs de la table "Matchs" : (et qui fonctionne bien, merci !)

// Sélection de la table Matchs et exécution de l'insertion du Résultat
$resultet ='SELECT * FROM Matchs ORDER BY id';
$resultat=mysql_query($resultet);

$asql="INSERT INTO Matchs SET
nomgagnant='$nomgagnant',
nomperdant='$nomperdant',
score='$score',
pointsgagnant='$pointsgagnant',
pointsperdant='$pointsperdant'";

$resultat =mysql_query($asql);
// Fin de la requête ---------------------------------------------------------

// Problème :
Voilà plusieurs jours que je planche sur une requête pour calculer et transférer
les valeurs des champs de la table "Matchs" vers la table "Membres",  sachant que pour chaque 'Membre.nom' :

- la valeur du champ 'Membres.nom' figure  plusieurs fois dans la table "Matchs"
en tant que 'Membres.nomgagnant' mais aussi en tant que 'Membres.nomperdant' (on récupère des points en gagnant mais aussi en perdant)

- Le champ 'Membres.nbpoints' doit être la somme de la valeur des champs 'Matchs.pointsgagnant' + 'Matchs.pointsperdant' pour chaque fois
que 'Membres.nom' sera trouvé dans 'Matchs.nomgagnant' 'OU Matchs.nomperdant'

- le champ 'Membres.nbmatchs' sera la somme des enregistrements de la Table "Matchs" chaque fois où la valeur de ce champ sera trouvée dans
'Matchs.nomgagnant' OU 'Matchs.nomperdant

(une boucle avec des SELECT, UPDATE, COUNT, INNER JOIN..... ou REPLACE ???
j'ai essayé en vain.... après des jours de vaines tentatives et recherches  !!!!)

C'est ma première expérience en php Mysql et je ne suis qu'un débutant " trop âgé" dans ce domaine !
Pourriez-vous me proposer une solution ?)
Merci... Il ne me manque que çà pour finir mon site !

Voir sur ce lien le tableau final que je souhaite obtenir à partir de mes Tables "Matchs" et "Membres" :
Ne fonctionne pas à l'heure actuelle, je mets à jour la table en manuel (!)

voie Tableau sur le site

Hors ligne

#2 18-10-2015 17:13:39

tof73
Membre
Inscription : 21-12-2014
Messages : 156
Site Web

Re : Planté sur une requete Mysql PHP

tu as des données redondantes entre les tables. un moyen est de faire la requete comme tu le souhaites, un autre, est, suite à :
$asql="INSERT INTO Matchs SET
nomgagnant='$nomgagnant',
nomperdant='$nomperdant',
score='$score',
pointsgagnant='$pointsgagnant',
pointsperdant='$pointsperdant'";
de faire :
update Membres set nbmatchs = nbmatchs + 1, nbpoints = nbpoints + $pointsgagnant where nom = '$nomgagnant'
update Membres set nbmatchs = nbmatchs + 1, nbpoints = nbpoints + $pointsperdant where nom = '$nomperdant'

Hors ligne

#3 19-10-2015 07:38:15

eurofox66
Membre
Inscription : 18-10-2015
Messages : 2

Re : Planté sur une requete Mysql PHP

Bonjour et Merci bien pour cette solution : çà fonctionne (OUF !)
En fait, comme tout débutant, je me mélangeais les pinceaux avec les quotes, doubles quotes et compagnie !
Mais cependant, je pensais plutôt à une mise à jour de table à table, après avoir mis à jour la table matchs,
pour permettre une vérification systématique en cas de doublons et autres erreurs de saisie..

En attendant, ta solution me convient parfaitement et je la mets en ligne tout de suite

MERCI !!!

Hors ligne

Pied de page des forums