IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requete pour relier 2 id vers 1 seul? [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    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

  2. #2
    Membre éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Par défaut
    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)?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 6
    Par défaut
    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?

  4. #4
    Membre éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Par défaut
    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.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    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é.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trop de requetes pour une seule action
    Par jazzybluesy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/10/2012, 11h30
  2. Deux Requete pour un seul DataGrid
    Par ahmedige dans le forum VB.NET
    Réponses: 8
    Dernier message: 25/05/2011, 17h12
  3. Réponses: 3
    Dernier message: 06/02/2009, 15h22
  4. Requete pour importation table Excel vers SQL
    Par Cakyas dans le forum Développement
    Réponses: 8
    Dernier message: 03/07/2008, 15h59
  5. requete pour avoir CONTENU procedures stockees
    Par bmayer dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 11/02/2004, 13h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo