Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mysql, update à partir d'un select

Transformer un select en update

    3 janvier 2020 à 23:33:29

    Bonjour, 

    je suis sous mysql (pour un site internet)

    et lorsque j'effectue la requête suivante : 

    SELECT * FROM commentaires2 WHERE auteur NOTIN (SELECT pseudo FROM pdf_membre)




    j'arrive a afficher tous les commentaires laisser par des anciens membres dont leur fiche a été supprimée du site.

    Maintenant j'aimerais faire quelques changements sur ces lignes, 

    je voudrais donc faire un UPDATE sur le champs auteur, et sur le champs email qui devront prendre respectivement les valeurs : Ancienmembre, et 0

    mais du coup je n'y arrive pas car la structure d'un update est si je ne me trompe pas 

    UPDATE

    SET

    WHERE

    je bloque à cause de mon FROM suivi des conditions dans mon select.

    Quelqu'un pour m'aider ?

    Merci d'avance du temps que vous prendrez pour m'aider.

    Eric

    -
    Edité par Rickways 3 janvier 2020 à 23:34:39

    • Partager sur Facebook
    • Partager sur Twitter
      4 janvier 2020 à 13:52:57

      Bonjour,

      Tu peux faire des jointures dans un UPDATE.

      Dans ce cas sur la table pdf_membres... et une jointure gauche avec un clause WHERE pseudo IS NULL.

      Après il faut aussi t'intéresser aux contraintes de clés étrangères pour éviter cela ... ON DELETE SET NULL par exemple...

      -
      Edité par Benzouye 4 janvier 2020 à 13:54:14

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        4 avril 2020 à 23:19:28

        Bonjour 

        je n'ai pas réussi à trouvé où mettre le "WHERE pseudo IS NULL", du coup j'ai tenté cela :

        UPDATE commentaires2
        SET auteur = "Ancienmembre", email = "0"
        WHERE auteur = (SELECT auteur FROM commentaires2 WHERE auteur NOT IN (SELECT pseudo FROM pdf_membre))
        

        Mais ça ne marche pas, j'ai un message d'erreur qui me dit qu'il y a plus d'une ligne en retour (ce qui est logique, mais du coup pas de traitement)

        • Partager sur Facebook
        • Partager sur Twitter
          5 avril 2020 à 10:15:25

          Je te proposais cela en fait :

          UPDATE commentaires2 C
          	LEFT JOIN pdf_membre M
          		ON C.auteur = M.pseudo
          SET
          	C.auteur = "Ancienmembre",
          	C.email = "0"
          WHERE M.pseudo IS NULL;

          Mais avec le recul, je me rend compte que tu pourrais améliorer les choses avec plus de rigueur et de normalisation.

          Tu as des membres et des commentaires. Un commentaire est posté par un membre et un membre peut poster plusieurs commentaires. C'est une relation 1,n qui implique une clé étrangère dans la table commentaire.

          Ton modèle devrait être :

          • membre ( id_membre [pk], pseudo, mail, etc. )
          • commentaire ( id_commentaire [pk], id_membre [fk], texte, etc. )

          La contrainte de clé étrangère dans la table commentaire te permettrait de ne pas avoir le problème que tu as aujourd'hui, avec un ON DELETE SET NULL qui ferai que lorsque l'on supprime un membre de la table membre, si il a des commentaires associés, alors MySQL mettrait NULL dans la colonne id_membre de la table commentaire peux ces enregistrements là ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            5 avril 2020 à 17:03:27

            Bonjour, 

            merci pour ton retour, je vais tester, mais ton commentaire m'intéresse, car en fait , le champs mail contenu dans la table commentaire est en faite le idmembre de la table membre...

            j'ai donc cette fameuse clé étrangère dont tu parles, mais je t'avoue que je ne m'y suis jamais penché.

            D'après ce que tu dis lorsque je fais un delete membre, il y aura la possibilité de mettre automatiquement le nom de l'auteur du commentaire en Ancienmembre, et de mettre le champs mail (soit l'idmembre) à 0 ?

            • Partager sur Facebook
            • Partager sur Twitter
              5 avril 2020 à 21:51:28

              Non, relis bien mon message.

              Le pseudo ne sera plus dans la table commentaires. Tu n'y aura que l'id du membre, et avec une contrainte de clé étrangère ON DELETE SET NULL, si tu supprimes un membre alors il y aura NULL dans la table commentaires.

              Email et pseudo ne doivent être que dans la table membre ...

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

              Mysql, update à partir d'un select

              × 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