update mysql: ne remplacer qu' une seule occurrence

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : update mysql: ne remplacer qu' une seule occurrence

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

par Mazarini » 07 août 2013, 09:57

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.

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

par sirakawa » 07 août 2013, 08:49

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

par yann18 » 06 août 2013, 18:04

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

par damien_55 » 06 août 2013, 17:01

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

par yann18 » 05 août 2013, 12:47

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

par damien_55 » 05 août 2013, 12:26

@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

par sirakawa » 05 août 2013, 11:42

update...... WHERE ($condition)

update mysql: ne remplacer qu' une seule occurrence

par damien_55 » 05 août 2013, 10:27

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.