Page 1 sur 1

update mysql: ne remplacer qu' une seule occurrence

Posté : 05 août 2013, 10:27
par damien_55
Bonjour à tous,

Je cherche un moyen de ne remplacer qu'une seule occurence d'un mot dans un champ myql;

J'ai bien la fonction fonctionnel:
update `table` set ChampX = REPLACE(ChampX, 'truc', '<a href="..." title="lien truc">truc</a>');
mais il remplace toutes les occurences et pas une seule qui pourrait etre la premiere par exemple.

Merci de votre aide.

Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 05 août 2013, 11:42
par sirakawa
update...... WHERE ($condition)

Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 05 août 2013, 12:26
par damien_55
@sirkawa:

Je comprends pas.

Que mettre dans la condition pour que seule la premiere occurence du mot dans le champ soit prise en compte?

Merci

Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 05 août 2013, 12:47
par yann18
bonjour,

il y a également la clause LIMIT de mysql:
"UPDATE `table` SET champX=" " LIMIT 1";


Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 06 août 2013, 17:01
par damien_55
bonjour,

@yann: le LIMIT 1 ne fonctionne pas.

par ex, dans mon champ sur une entrée , j'ai 3 fois le mot dengue.
UPDATE `news` SET contenu = REPLACE(contenu, 'dengue', '<a href="/dengue.html" title="dengue">dengue</a>') WHERE id='1' LIMIT 1;
il me remplace les 3 occurences et je souhaite en remplacer qu'une seule.

Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 06 août 2013, 18:04
par yann18
bonjour,

@yann: le LIMIT 1 ne fonctionne pas.

par ex, dans mon champ sur une entrée , j'ai 3 fois le mot dengue.
UPDATE `news` SET contenu = REPLACE(contenu, 'dengue', '<a href="/dengue.html" title="dengue">dengue</a>') WHERE id='1' LIMIT 1;
il me remplace les 3 occurences et je souhaite en remplacer qu'une seule.
non pas avec replace. si l'id, pour peu qu'il soit unique, de l'enregistrement est connu c'est suffisant pour effectuer une seule mise à jour.
$mysqli = new mysqli('localhost', 'root', 'pass', 'DB');
  $champ=$mysqli->real_escape_string('<a href="/dengue.html" title="dengue">dengue</a>');      
$sql="UPDATE `news` SET contenu ='".$champ. "'  WHERE id='1' ";
$query=$mysqli->query($sql);

Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 07 août 2013, 08:49
par sirakawa
Mes excuses, j'avais mal compris la question:
Il faudrait peut-être faire un select de l'enregistrement à modifier, charger le champ à modifier dans php et de servir des fonctions php:
str_replace fait la même chose que REPLACE de mysql, mais on peut manipuler des tableaux:
$champ est supposé contenir le champ de ta bdd
$mot est le mot à remplacer
$remplaçant est le mot qui remplace;
$t_champ = explode (" ", $champ);
var_dump($t_champ); :: pour vérifier que tu as bien tous les mots de ton champ
$t_champ[0] = $remplaçant;
$nouveau_champ = implode(" ", $tchamp);
et ici ta commane mysql
Update set champ='$nouveau_champ'; ou qq ch du genre

Re: update mysql: ne remplacer qu' une seule occurrence

Posté : 07 août 2013, 09:57
par Mazarini
De mémoire, il y a INSTR() qui permet de connaitre la première position d'une chaine. Reste plus qu'a jouer avec la découpage (SUBSTR/CONCAT).

Le faire en PHP me semble quand même plus facile.