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

Requêtes MySQL Discussion :

Requête SQL pour changer des valeurs à l'intérieur de chaînes ?


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut Requête SQL pour changer des valeurs à l'intérieur de chaînes ?
    Bonjour,

    je cherche la requête SQL qui me permettrait de changer toutes les occurrences d'une valeur spécifiée à l'intérieur des chaînes d'une table...

    J'ai bien un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE `jos_vm_product_type_2` 
    SET authors = "truc bidule 2" 
    WHERE auteur = "truc bidule 1";
    Oui mais ça me remplace complètement toute la valeur, alors que je ne souhaite que changer toutes les occurrences d'une chaîne contenue à l'intérieur d'une autre...

    Comment faire ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Euh c'est correct de dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE `jos_vm_product_type_2` 
    SET "truc bidule 2" 
    WHERE "truc bidule 1" IN "Auteurs";
    Car évidemment la valeurs totale de "Auteurs" peut contenir bien d'autres éléments que seulement "truc bidule 1"...

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    En l'absence d'information sur la modification, regarde REPLACE

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    En l'absence d'information sur la modification, regarde REPLACE
    Aïe je ne suis pas sûr de bien comprendre...

    Par clarifier ce que je cherche :
    pour chacune des entrées de la colonne 'authors' de ma table 'jos_vm_product_type_2', j'ai plusieurs auteurs.
    Par exemple : 'truc bidule 1;truc bidule 24;truc bidule 34;truc bidule 49'

    Il faudrait qu'à chaque fois qu'il y a 'truc bidule 1' dans la chaîne, je le remplace par 'truc bidule 2'

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Mister Paul Voir le message
    Il faudrait qu'à chaque fois qu'il y a 'truc bidule 1' dans la chaîne, je le remplace par 'truc bidule 2'
    Ta requête du post 1 le fait, quel est le problème ?
    Oui mais ça me remplace complètement toute la valeur, alors que je ne souhaite que changer toutes les occurrences d'une chaîne contenue à l'intérieur d'une autre...
    C'est là que REPLACE a un sens je pense, mais pour clarifier, un exemple des données dans la table et du résultat souhaité éviterait les incompréhensions...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Ta requête du post 1 le fait, quel est le problème ?
    Ben cette requête recherche la valeur complète et la remplace en totalité. Là je cherche à intervenir seulement sur une portion de la chaîne...
    Citation Envoyé par skuatamad Voir le message
    C'est là que REPLACE a un sens je pense, mais pour clarifier, un exemple des données dans la table et du résultat souhaité éviterait les incompréhensions...
    Dans le post #4 je donne un exemple. Mais je n'ai peut-être pas été très clair...
    Et je ne vois pas encore comment faire intervenir REPLACE dans une requête pour ce que je souhaite...

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    D'abord tester en select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select replace (lacolonne,'truc bidule 1','truc bidule 2') from latable
    et donc en adaptant à l'update si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update latable
       set lacolonne = replace (lacolonne,'truc bidule 1','truc bidule 2')
     where lacolonne like '%truc bidule 1%'
    Mais avant, histoire de pouvoir recharger les données d'origine si pas INNODB (donc pas de rollback) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table latable_bk as select * from latable
    Et pour recharger les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    truncate table latable
    --puis
    insert into latable select * from latable_bk

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Merci beaucoup pour l'aide.
    Ça me semble parfait.

    Je fais la mise à jour demain à tête reposée pour ne pas prendre de risque.
    Je mets en résolu dans la foulée si OK

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 747
    Points : 168
    Points
    168
    Par défaut
    Super

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

Discussions similaires

  1. Requête SQL pour décaler des lignes
    Par dekalima dans le forum Requêtes
    Réponses: 9
    Dernier message: 25/01/2011, 11h06
  2. Requête SQL pour fusionner des colonnes
    Par Aenur56 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/05/2010, 19h23
  3. [MySQL] Requête SQL pour afficher des "Related Items"
    Par neoweiter dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/07/2009, 14h15
  4. [MySQL] Problème de requête SQL pour calculer des stats
    Par k2006 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/05/2009, 18h23
  5. Boucles pour changer des valeurs
    Par adurand dans le forum Access
    Réponses: 7
    Dernier message: 29/01/2007, 17h45

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