PHP Mysql更新集替换完全匹配

时间:2013-03-07 21:25:24

标签: php mysql replace preg-replace match

我需要帮助替换数据库中的确切数字。

我的表看起来像这样..

ID NAME    IMAGES
-------------------------------
1  person1  1,2,3...101,102,103

当我使用

mysql_query("UPDATE table SET images = REPLACE(images, '3,', '') WHERE id = '1'");

它会删除以3 ..结尾的所有数字中的所有3个

13, = 1
23, = 2
113, = 11

1 个答案:

答案 0 :(得分:2)

正如已经提到的,正确的解决方案是规范化数据。但是,如果您坚持此表结构,您仍然可以使用3个UPDATE条件执行单个CASE语句,以匹配开头,中间或结尾的数字。

要从列表的开头或结尾删除它,您可以使用SUBSTR(),然后继续使用REPLACE()将其从列表中间删除。

UPDATE
  table
SET images = 
  CASE
    /* if 3 is in the leftmost position in the list, remove first 2 chars... */
    WHEN LEFT(images, 2) = '3,' THEN SUBSTR(images, 3)
    /* if 3 is in the rightmost position in the list, remove last 2 chars... */
    WHEN RIGHT(images, 2) = ',3' THEN SUBSTR(images, 1, LENGTH(images) - 2)
    /* Otherwise replace a single 3 bounded by commas with a single comma */
    ELSE REPLACE(images, ',3,', ',')
  END
WHERE id = '1'