当前位置: 首页 > 面试题库 >

从SET字段中删除值的最佳方法是什么?

冯祺
2023-03-14
问题内容

这是更新mysql SET字段,从字段中删除特定值的最佳方法。

例如。值分别为1,2,3,4,5的字段类别?我想从列表中删除“ 2”:

UPDATE table 
SET categories = REPLACE(categories, ',2,', ',') 
WHERE field LIKE '%,2,%';

但是,如果“ 2”是列表中的第一个或最后一个值,该怎么办?

UPDATE table 
SET categories = REPLACE(categories, '2,', '') 
WHERE field LIKE '2,%';

UPDATE table 
SET categories = REPLACE(categories, ',2', '') 
WHERE field LIKE ',2%';

我如何用一个查询处理所有3种情况?


问题答案:

如果您需要从集合中删除的值不能多次出现,则可以使用以下方法:

UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM REPLACE(CONCAT(',', categories, ','), ',2,', ','))
WHERE
  FIND_IN_SET('2', categories)

看到它在这里工作。如果该值可以多次出现,则将删除所有出现的值:

UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM
      REPLACE(
        REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
    )
WHERE
  FIND_IN_SET('2', categories)


 类似资料:
  • 我有URL字符串,如: “http://www.xyz/path1/path2/path3?param1=value1&param2=value2”。 我需要获得这个不带参数的url,所以结果应该是: “http://www.xyz/path1/path2/path3”。 我是这样做的: 有没有更好的办法呢?

  • 问题内容: 在Python中,至少有两种方法可以使用键从字典中删除项目。 两种方法都会从字典中删除项目。 我想知道这些方法之间有什么区别,以及在哪种情况下应该使用其中一种。 问题答案: 如果要 捕获已删除的项目 ,请使用,例如。 使用,如果你想 从字典中删除项目 。 如果要删除,则在密钥不在词典中时禁止显示错误:

  • 问题内容: 我有一个600万行的SQLite表。 从表中删除是很慢的。 删除表然后重新创建它似乎更快。 我正在使用它进行数据库导入。 删除表会是更好的方法还是有办法快速删除所有数据? 问题答案: 一个很大的不同是DML和DDL。对于数据库事务,这非常重要。最后的结果可能是相同的,但是这些操作有很大的不同。 如果您只是要了解性能,那么可以删除并重新创建表。如果您需要在导入中进行事务处理,则必须注意,

  • 问题内容: 我发现自己想在许多应用程序中滚动删除早于(x)天的行。在交通繁忙的桌子上最有效地做到这一点的最佳方法是什么? 例如,如果我有一个存储通知的表,而我只想将其保留7天。还是我只想保留31天的高分。 现在,我继续存储存储的纪元时间,并运行一个cron作业,该作业每小时运行一次,并按如下所示增量删除它们: 我这样做直到mysql_affected_rows返回0。 我曾经一次完成所有操作,但是

  • 问题内容: 用jQuery删除表行的最佳方法是什么? 问题答案: 你是对的: 如果您的行中包含,则此方法很好用,例如: 如果没有,则可以使用jQuery的大量选择器中的任何一个。

  • 问题内容: 连接字符串上的用户标识不是变量,并且与程序的用户标识(例如,可以是GUID)不同。如果您的连接字符串的用户ID是静态的,您如何审核日志删除? 记录插入/更新/删除的最佳位置是通过触发器。但是使用静态连接字符串,很难记录谁删除了某些内容。有什么选择? 问题答案: 使用SQL Server,您可以使用CONTEXT_INFO将信息传递给触发器。 我在必须使用触发器(例如,表上的多个写入路径