2010-06-22 7 views
3

j'ai une colonne de notes qui contient du texte et a un identifiant dans le texte, quelque chose comme « un texte aléatoire (actvityid - 1234) »Mysql REGEXP comment faire une correspondance exacte

je dois retirer la id 1234 dans ce cas et mettre à jour la colonne activityid dans la même table.

ma requête ressemble à ceci

"UPDATE table_name SET activityId = {$f['activityId']} WHERE notes REGEXP '{$f['activityId']}' " 

le problème est si $ f [ « ActivityId »] est de 34 ou 123 par exemple, il met à jour encore la colonne ActivityID avec cette valeur. Comment puis-je faire une correspondance exacte sur "1234" et mettre à jour seulement si elle correspond à la chaîne entière, ici "1234".

Merci beaucoup.

Répondre

5
WHERE notes REGEXP CONCAT('(actvityid - ', {$f['activityId']}, ')') 

ou

WHERE notes REGEXP '[[:<:]]{$f['activityId']}[[:>:]]' 

[[:<:]] et [[:>:]] représente word boundaries.

+0

salut bien juste pour le rendre beaucoup plus claire la colonne notes contient du texte quelque chose comme ça "étape abc mise à jour sur le projet 13084 (Activité - 309)" maintenant je dois retirer 309 et mettre à jour avtivityId coulmn dans la même table. – bharath

+0

@Naktibalda: le même problème en utilisant LIKE. – bharath

+0

@Bharath Vous ne pouvez pas lire à partir d'une table dans la même requête que celle que vous mettez à jour, si c'est ce que vous essayez de faire. – Amarghosh

1

Pas besoin d'utiliser CONCAT si variable est passée de PHP, et pas besoin d'utiliser REGEXP si vous chaîne de correspondance exacte sans caractères spéciaux

WHERE notes LIKE '%(actvityid - {$f['activityId']})%' 
+0

votre droit aussi .... désolé de ne pas mentionner plus tôt .. merci beaucoup. – bharath

Questions connexes