Partage
  • Partager sur Facebook
  • Partager sur Twitter

UPDATE avec DISTINCT

    3 mai 2021 à 11:47:43

    Bonjour, toujours dans la création de mon jeu de gestion d'une équipe de football, je suis en train d'optimiser l'intégralité de mes requêtes.

    Actuellement j'essaie d'optimiser une requête en particulier :

    UPDATE joueurs SET joueur_statut = 1 WHERE ('.$gardien_a_titulariser.') AND joueur_poste = 1 AND joueur_statut = 0 ORDER BY joueur_physique DESC

    La variable $gardien_a_titulariser comprend l'Id du club auquel appartient le gardien, comme ceci : joueur_id_club = 

    En effet auparavant je fais une vérification des équipes qui n'ont pas pensé à mettre un gardien titulaire afin de le faire à leur place.

    Cette requête fonctionne bien si l'équipe n'a pas de gardien titulaire mais un seul gardien remplacant. Il va automatiquement passé titulaire.

    Cependant, si une équipe possède 2 gardiens, les deux vont passer titulaires ce qui pose problème.

    Est-il possible avec la fonction DISTINCT ou une autre de limiter le nombre d'update par équipe grace au champ joueur_id_club par exemple ? Ou dois-je procéder autrement en effectuant des vérifications en amont de la requête ?

    Merci beaucoup :)

    • Partager sur Facebook
    • Partager sur Twitter
      3 mai 2021 à 11:58:49

      Bonjour,

      Le problème pour faire automatiquement la mise à jour c'est que dans le cas où deux (ou plus) gardiens sont possibles pour devenir titulaire, alors comment déterminer lequel des deux "promouvoir" ?

      Si tu as un critère tangible, alors ce devrait être faisable.

      -
      Edité par Benzouye 3 mai 2021 à 11:59:24

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        3 mai 2021 à 12:08:02

        C'est bien ça le problème, je n'ai aucun critère pour choisir l'un ou l'autre si ce n'est celui qui possède le plus de physique comme je l'ai indiqué dans ORDER BY mais les deux peuvent être à fond de leur forme :/

        Peut-être que je suis obligé d'aller chercher l'id des joueurs dont le club n'en possède pas titulaire et dont le poste est gardien, et là je pourrai utiliser DISTINCT si j'ai bien compris son utilisation ?

        • Partager sur Facebook
        • Partager sur Twitter
          3 mai 2021 à 13:43:10

          fouteox a écrit:

          celui qui possède le plus de physique

          C'est un critère suffisant en terme de données ...

          Pour lister les clubs sans gardien titulaire :

          SELECT C.id_club
          FROM
          	clubs C
          		LEFT JOIN joueurs J
          			ON C.id_club = J.joueur_id_club
          			AND J.joueur_poste = 1
          			AND J.joueur_statut = 0
          WHERE J.id_joueur IS NULL

          Pour sélectionner le meilleur gardien physique non titulaire :

          SELECT
          	J.id_joueur
          FROM
          	(
          		-- MAX physique remplaçant par poste par club
          		SELECT
          			joueur_id_club,
          			joueur_poste,
          			MAX( joueur_physique ) AS max_physique
          		FROM joueurs
          		WHERE joueur_statut = 0
          		GROUP BY
          			joueur_id_club,
          			joueur_poste
          	) MP
          		INNER JOIN joueurs J
          			ON J.joueur_id_club = MP.joueur_id_club
          			AND J.joueur_poste = MP.joueur_poste
          			AND J.joueur_physique = MP.max_physique
          WHERE J.joueur_poste = 1

          Ensuite tu peux UPDATE selon cet id là uniquement ...

          fouteox a écrit:

          là je pourrai utiliser DISTINCT si j'ai bien compris son utilisation ?

          Non, DISTINCT sert à éliminer les doublons (valeurs identiques), ce n'est pas le cas ici puisque tu auras bien plusieurs id jouer différents ...

          -
          Edité par Benzouye 3 mai 2021 à 13:44:25

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          UPDATE avec DISTINCT

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown