Remplacer une chaine de caractères via requête UPDATE sous MySQL ?

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Remplacer une chaine de caractères via requête UPDATE sous MySQL ?

    Hello,

    J'ai un script shell qui lance des requêtes MySQL pour certains traitements, tout fonctionne bien.
    J'aimerai pouvoir remplacer dans la base MYSQL un code pour l'extension Jevents, qui est différent pour chaque site.
    Voir l'image ci-dessous :

    Cliquez sur l'image pour l'afficher en taille normale  Nom : 2020-09-23_12-24-14.jpg  Affichages : 0  Taille : 194,2 Ko  ID : 2020834

    Ma requete est la suivante :

    Code HTML:
    mysql -D DATABASE_NAME -e "UPDATE TABLE SET params = REPLACE(params, '%OLD_CODE%', 'NEW_CODE') WHERE element = 'EXTENSION'"
    Le soucis c'est que la zone %OLD_CODE% ne fonctionne pas.
    Je suis obligé de saisir la chaine exacte.
    Problème, vu que la chaine de caractère est différente pour chaque site, comment faire sélectionner chaque chaine sans tenir compte de son contenu?

    J'ai même essayé avec * pour tout prendre mais idem, cela ne donne rien.

    Qu'en dites vous?

    Merci
    Laurent
    Expert en conception et réalisation de sites Internet 100% Joomla
    www.toonetcreation.com

  • #2
    désolé je me suis mal exprimé je pense

    en fait ce n'est pas tout le contenu du champ PARAMS que je veux remplacer, mais juste la chaine de caractère CODE_HERE dans l'image.

    en clair CODE_HERE serait un code du style gfddg-5gtr5df4hgt-gerfdgfd, que je voudrai remplacer par autre chose...sans perdre tout le contenu qu'il y a dans le champ PARAMS avant et après CODE_HERE
    Expert en conception et réalisation de sites Internet 100% Joomla
    www.toonetcreation.com

    Commentaire


    • #3
      Bonjour,
      petite recherche Google et voilà le résultat ... j'ai lu en diagonale mais je pense que ça correspond a ce que tu cherches à faire

      La fonction REPLACE dans le langage SQL permet de remplacer des caractères alphanumérique dans une chaîne de caractère. Cela sert particulièrement à mettre à jour des données dans une base de données ou à afficher des résultats personnalisés. Syntaxe Syntaxe basique …
      Ce forum, vous l'aimez ? il vous a sauvé la vie ? Vous y apprenez chaque jour ? Alors adhérez à l'AFUJ https://www.joomla.fr/association/adherer
      Cette année, le JoomlaDay FR a lieu à Bruxelles, les 20 et 21 mai 2022, plus d'infos et inscriptions : www.joomladay.fr

      Commentaire


      • #4
        Hello.

        En fait la rubrique params est un champ Json encodé qui contient plusieurs variables dont clubcode.

        Il ne faut donc modifier que la partie qui concerne cette variable.

        Soit chercher de contenu encadré par
        ,"clubcode":"
        et
        ",

        pour obtenir ceci

        ,"clubcode":"gfddg-5gtr5df4hgt-gerfdgfd",

        Je crois que replace fonctionne avec le regex.

        C'est donc plutôt de ceci qu'il faut s'inspirer : https://stackoverflow.com/questions/...place-in-mysql
        et tester avec par exemple https://regex101.com/
        Dernière édition par roland_d_alsace à 23/09/2020, 17h43
        A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
        Rejoignez le Joomla Users Groupe Alsace...
        roland_d_alsace va-t-il devenir roland_du_grand_est ?

        Commentaire


        • #5
          Envoyé par manu93fr Voir le message
          Bonjour,
          petite recherche Google et voilà le résultat ... j'ai lu en diagonale mais je pense que ça correspond a ce que tu cherches à faire

          https://sql.sh/fonctions/replace
          j'ai déjà fouiné et j'utilise déjà REPLACE, le soucis n'est pas la en fait.

          en gros l'idée est de remplacer ça :

          Code HTML:
          {"com_difficulty":"3","clubcode":"546465-595gfd-gfgfds65-5654gfd","shownews":"1","com_calViewName":"flat"," darktemplate":"0"}
          par ça :

          Code HTML:
          {"com_difficulty":"3","clubcode":"fg5gfdgfq-grefdg-gredfgfd","shownews":"1","com_calViewName":"flat", "darktemplate":"0"}
          donc il faut pouvoir échapper tous les caractères du code ci-dessus car cette chaine est différente selon le site, donc je ne peux pas la spécifier en dur.
          Expert en conception et réalisation de sites Internet 100% Joomla
          www.toonetcreation.com

          Commentaire


          • #6
            Envoyé par roland_d_alsace Voir le message
            Hello.

            En fait la rubrique params est un champ Json encodé qui contient plusieurs variables dont clubcode.

            Il ne faut donc modifier que la partie qui concerne cette variable.

            Soit chercher de contenu encadré par
            ,"clubcode":"
            et
            ",

            pour obtenir ceci

            ,"clubcode":"gfddg-5gtr5df4hgt-gerfdgfd",

            Je crois que replace fonctionne avec le regex.

            C'est donc plutôt de ceci qu'il faut s'inspirer : https://stackoverflow.com/questions/...place-in-mysql
            et tester avec par exemple https://regex101.com/
            yes c'est carrément ça dont j'ai besoin , je vais aller voir les liens que tu as mis merci
            je posterai la solution ici ensuite.
            Expert en conception et réalisation de sites Internet 100% Joomla
            www.toonetcreation.com

            Commentaire


            • #7
              alors cette requête fonctionne :

              Code HTML:
              mysql -D DATABASE_NAME -e "UPDATE TABLE SET params = REGEXP_REPLACE(params, '"clubcode":".+"', '"clubcode":"TOTO"') WHERE element = 'EXTENSION'"
              mais le problème est que le Json de sortie dans la base MYSQL ressemble à ça :

              Code HTML:
              {"com_difficulty":"3","clubcode":"TOTO"}
              au lieu de ressembler à ça :

              Code HTML:
              {"com_difficulty":"3","clubcode":"TOTO","shownews":"1","com_calViewName":"flat"," darktemplate":"0"}
              En fait cela à supprimé tout ce qu'il y avait après le "clubcode":"TOTO"
              Expert en conception et réalisation de sites Internet 100% Joomla
              www.toonetcreation.com

              Commentaire


              • #8
                Merci Eddy.vh qui m'a aidé par mail et voici la bonne réponse :

                Code HTML:
                mysql -D DATABASE_NAME -e "UPDATE TABLE SET params = REGEXP_REPLACE(params, '"clubcode":".+?"', '"clubcode":"TOTO"') WHERE element = 'CHAINE'"
                roland_d_alsace et cavo789 aiment ceci.
                Expert en conception et réalisation de sites Internet 100% Joomla
                www.toonetcreation.com

                Commentaire

                Annonce

                Réduire
                Aucune annonce pour le moment.

                Partenaire de l'association

                Réduire

                Hébergeur Web PlanetHoster
                Travaille ...
                X