Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 12h54   #1
Invité de passage
 
Homme gregory
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme gregory
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
Par défaut requete pour relier 2 id vers 1 seul?

bonjour je crée un tournoi de tennis(c'est un pti pour mon bts) et je sèche sur la requête me permettant de choisir 2 joueur et de leur attribuer une date de match

j'ai 3 table:
1 adherent (celle la n'est pas utilie dans le cas présent)
1 tournoi (id, date_heure)
1 participe(adherent_id, tournoi_id, participation)
je souhaite donc faire apparaitre le même tournoi_id pour 2 adherent_id et la rien a faire j'ai trouvé une requête mais celle si me met le tournoi_id sur tous mes adherent_id ??

UPDATE participe JOIN tournoi SET tournoi_id=id WHERE id=....

je sais que c'est faux si quelqu'un peut m'aider
merci d'avance
greg95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 16h08   #2
Membre du Club
 
Femme Adeline
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Femme Adeline
Âge : 30
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 44
Points : 44
Tout d'abord une question à quoi sert le champ 'participation' dans ta table participe???

Ensuite pourquoi un update??? tu voudrai pas plutôt ajouter un enregistrement dans ta table participe? ou même ajouter deux enregistrements (un pour chacun des joueurs)?
PtiteA2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 16h44   #3
Invité de passage
 
Homme gregory
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme gregory
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
le champs participation ne renvoi qu'un booleen il participe ou non donc la pas de soucis j'ai récuperé tous mais adherent qui participe
rajouter un enregistrement pourquoi pas mais mon problème reste le même ces de faire correspondre le même "tournoi_id" avec 2 "adherent_id" et pas plus car avec ma requête il est rattaché a tous mes id?
greg95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 17h10   #4
Membre du Club
 
Femme Adeline
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Femme Adeline
Âge : 30
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 44
Points : 44
Tu peux me donner un exemple de jeux de données pour que je vois ce que tu as dans tes tables?
Et me dire ce que tu voudrais que ta requête ajoute ou modifie.
PtiteA2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 07h30   #5
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 726
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 726
Points : 3 293
Points : 3 293
Salut

Faudrait peut être en 1er faire une requête SELECT pour récupérer les 2 joueurs en questions (il y aurait alors un LIMIT 2 à cette requête).

Faudrait mieux préciser sous quelle condition il faudrait récupérer tel joueur plutôt qu'un autre, s'il y en a bien sûr.
Comme par exemple exclure les joueurs qui participent déjà.

Un exemple :
Code :
1
2
3
4
5
6
7
8
 
SELECT p.adherent_id
FROM participe p
JOIN tournoi t ON p.tournoi_id = t.id
WHERE p.adherent_id NOT IN (
    SELECT adherent_id FROM participe WHERE participation = 1
    )
LIMIT 2
Suffit après de boucler sur les 2 résultats pour faire les UPDATE.
Par ailleurs, il faudrait peut être une table "rencontre" ayant des couples d'IDs d'adhérents pour savoir quel joueur joue avec tel autre joueurs, car sinon, comment feras tu pour le savoir ?
Le booleen que tuas indique seulement si on participe ou pas, rien de plus, non ? C'est assez maigre comme info, non ?

Dans ce cas d'ailleurs, cette table "participe" ne servirait pas à grand chose (inutile même), c'est grâce à ces couples d'IDs de cette table "rencontre" qui dira si tel joueur participe ou pas, donc chaque couple d'IDs feront office de booleen.
Pas présent -> False
Présent -> True
Et en plus on sait qui joue avec qui.
Vois tu ce que je veux dire ?


Petite parenthèse. A savoir qu'il aurait été mieux (à mon sens) que le champ "id" de la table "tournoi" ait le même nom que la table "participe" vu qu'il s'agit de la même donnée (clé primaire - clé étrangère).
Donc "tournoi_id" dans les 2 tables.
A noter que ça ne cause pas de problème d'ambiguïté grâce aux alias.


Pour ce qui est de sélectionner une date, il est préférable de le prévoir au niveau de l'interface, genre choisir cette date dans un calendrier (Javascript serait un bon moyen) à la même étape que lorsqu'on valide cette rencontre.
Que ceci reste une opération "humaine" serait plus simple à mon sens.

Si tu veux vraiment automatiser l'acquisition de cette date, alors il faudrait peut être avoir une notion de cours (les terrain de tennis) et des plages horaire.
En gros, d'avoir au préalable cette liste, puis il suffit de prendre à chaque fois la plage horaire suivante (libre) pour chaque rencontre.

Sachant aussi que la durée d'un match ne sera connu que lorsqu'il sera terminé, sans compter que la météo peu aussi se mettre de la partie.
Bref, il y aura toujours une part d'incertitude, donc le "tout automatisé" sera à mon sens difficile à obtenir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 11h10   #6
Membre expérimenté
 
Avatar de redoran
 
Homme
Developpeur- Amateur
Inscription : juin 2010
Messages : 981
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : Algérie

Informations professionnelles :
Activité : Developpeur- Amateur
Secteur : Santé

Informations forums :
Inscription : juin 2010
Messages : 981
Points : 572
Points : 572
Envoyer un message via Skype™ à redoran
Re ; +1 Run
je crois aussi faut spécifier les critères de choix de joueur afin de permettre une sélection automatique sans intervention humaine !!!!! sauf cas contraire.
donc faut faire un algorithme de choix ......
je crois qu'il faut passé par une étude de l'existant et voir les règles de gestion de ce type de tournois et les différentes contraintes pour avoir une bonne modélisation optimisé.
redoran est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 14h21   #7
Invité de passage
 
Homme gregory
Étudiant
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme gregory
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 3
Points : 3
merci pour vos réponses mais je suis assez limité car pour le site que je fais je ne peux pas utiliser de javascript ou autre dao etc.. je doit rester en procédurale. par contre j'ai réussi a attribuer 1 id date a deux joueur mais je ne sais pas comment faire une boucle pour qu'il me prenne en compte l'id 1 puis l'id 2 etc.. voici mon code sa sera peut être plus clair

Code :
1
2
3
4
5
6
7
8
9
10
$req='SELECT adherent_id FROM participe WHERE tournoi_id=0 AND participation=1';
$liste=mysql_query($req);
 
 
	for($i=0;$i<2;$i++){
	$match=mysql_fetch_row($liste);
	$test='update participe join tournoi set tournoi_id=id where adherent_id='.$match[0];
	$t=mysql_query($test);
	echo $t;	
}
donc ma premier requête sélectionne tous les joueurs ou l'id du tournoi (donc en clair la date du match dans ma base) est a 0 et ma boucle permet de passer cet id a 1, mais je ne vois pas comment passer les 2 suivant a 2 puis les autres a 3 etc..

si quelqu'un peut m’éclairer
merci d'avance
greg95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 09h51   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 726
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 726
Points : 3 293
Points : 3 293
N'hésite pas à parcourir les forums, comme celui-ci, tu obtiendras pas mal d'exemples de code.

Un exemple très courant :
Code :
1
2
3
4
5
6
7
8
$joueurs_rs = mysql_query($req);
 
while ($participe = mysql_fetch_array($joueurs_rs, MYSQL_ASSOC)) {
    $update_sql = "UPDATE participe
SET tournoi_id = ???
WHERE adherent_id = '".(int)$participe['adherent_id'];
    $update_rs = mysql_query($update_sql);
}
Citation:
donc ma premier requête sélectionne tous les joueurs ou l'id du tournoi (donc en clair la date du match dans ma base) est a 0 et ma boucle permet de passer cet id a 1, mais je ne vois pas comment passer les 2 suivant a 2 puis les autres a 3 etc..
Je ne comprends du tout ce que tu est en train de faire.

Comment ce fait-il que tu ait un ID de tournoi valant 0 ?
Le 1er tournoi ne devrait il pas avoir comme valeur 1 ?


Je te donne mon avis (pure hypothèse bien sûr) sur ce qui me semble le plus logique.

Normalement tu devrais avoir un ou plusieurs tournois dans cette table "tournoi".
1er tournoi : ID = 1
2ème tournoi : ID = 2
... etc ...
Il ne devrait pas avoir de lignes avec comme ID 0.

Lorsqu'on veut créer des adhérents (joueurs) pour un tournoi en particulier parmi les différents tournoi, par exemple le 2, alors il faut faire un INSERT INTO, une insertion (et non un UPDATE).
Exemple :
Code :
1
2
INSERT INTO participe (adherent_id, tournoi_id, participation)
VALUES (1, 2, 1)
Cela sous entend qu'on sache la valeur de l'adherent, du tournoi (paramètre $_POST ou $_GET par exemple).


Si on a déjà créer des joueurs dans cette table "participe", puis pour X raison il y a un adhérent qui ne souhaite pas participer au tournoi 2 mais plutôt au tournoi 1, alors cette fois on fera un UPDATE (une mise à jour) uniquement sur l'ID du tournoi en relation de cet adhérent (adherent_id).
Exemple :
Code :
UDPATE participe SET tournoi_id = 1 WHERE adherent_id = 1 AND tournoi_id = 2
Là aussi ça sous entend qu'on sache la valeur du tournoi et de l'adhérent.


A coté de ça, faire une liste de participants, certes, pourquoi pas.
Mais dans ton domaine, il y a tout de même une notion très forte de "rencontre", de "match".
D'ailleurs, toi même tu as utiliser naturellement comme nom de variable $match.
Or, ce n'est pas du tout le cas, un match, c'est très précisément 2 joueurs bien précis qui joue entre eux, ce que ne représente pas cette table "participe".
Il y a une notion de couples de joueurs.
De plus, un match débouche sur un score, il y a aussi un gagnant et un perdant.

Mais encore, si dans cette table "participe" il venait à avoir un nombre impair de joueurs, il y aura alors un joueur isolé.
Comment fera t-il pour faire un match (ou une rencontre) ?


Autrement dit, si ta Bdd ne représente pas la réalité, ne couvre pas le secteur dont tu traites, tu auras beaucoup de peine a obtenir ce que tu veux.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h59.


 
 
 
 
Partenaires

Hébergement Web