Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/04/2011, 19h46   #1
Membre régulier
 
Inscription : février 2007
Messages : 483
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 483
Points : 75
Points : 75
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 :
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 ?
Mister Paul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 21h24   #2
Membre régulier
 
Inscription : février 2007
Messages : 483
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 483
Points : 75
Points : 75
Euh c'est correct de dire :
Code :
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"...
Mister Paul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 21h51   #3
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
En l'absence d'information sur la modification, regarde REPLACE
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 22h07   #4
Membre régulier
 
Inscription : février 2007
Messages : 483
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 483
Points : 75
Points : 75
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'
Mister Paul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 22h53   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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 ?
Citation:
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...
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 23h10   #6
Membre régulier
 
Inscription : février 2007
Messages : 483
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 483
Points : 75
Points : 75
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...
Mister Paul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 00h13   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
D'abord tester en select :
Code :
SELECT REPLACE (lacolonne,'truc bidule 1','truc bidule 2') FROM latable
et donc en adaptant à l'update si j'ai bien compris :
Code :
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 :
CREATE TABLE latable_bk AS SELECT * FROM latable
Et pour recharger les données :
Code :
1
2
3
TRUNCATE TABLE latable
--puis
INSERT INTO latable SELECT * FROM latable_bk
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 01h00   #8
Membre régulier
 
Inscription : février 2007
Messages : 483
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 483
Points : 75
Points : 75
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
Mister Paul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2011, 01h45   #9
Membre régulier
 
Inscription : février 2007
Messages : 483
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 483
Points : 75
Points : 75
Super
Mister Paul est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h34.


 
 
 
 
Partenaires

Hébergement Web