PHP Mysql更新集替换精确匹配

PHP Mysql更新集替换精确匹配,php,mysql,replace,preg-replace,match,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 如前所述,

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

我的桌子看起来像这样

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

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

要从列表的开头或结尾删除它,可以使用
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'

您不应在其中一个字段中使用逗号分隔的列表。规范化数据库并将图像/图像ID存储在单独的表中。您应该规范化数据。这样更容易操作。在3之前添加逗号?mysql_查询(“更新表集images=REPLACE(images,”,3,”),其中id='1');顺便说一句,previups注释是可以的,您应该规范化您的数据。您希望发生什么?你告诉我们发生了什么,但不是你想要的结果。