在mysql中匹配子字符串时删除查询

时间:2012-05-29 12:14:52

标签: php mysql

我有一个名为“MYprojects”的表和一个名为“Rights”的列。现在我有一个以下的行

id =>1

rights => 7,4,34,532,12,32

现在我需要删除该行,如果以下是任何数字输入权限列 值

2,4,65,34

如您所见,列中的值存在4,因此我需要删除该行。 有人可以告诉我mysql查询或函数吗? 它可以通过应用循环通过服务器端脚本完成,但我需要一个优化的解决方案 感谢

2 个答案:

答案 0 :(得分:0)

DELETE FROM `MYprojects` WHERE `rights` REGEXP '(^|,)2($|,)' OR `rights` REGEXP '(^|,)4($|,)' OR `rights` REGEXP '(^|,)65($|,)' OR `rights` REGEXP '(^|,)34($|,)'

这是我能想到的最好的方式。正则表达式确保输入的数字是列表的一部分,而不仅仅是另一个数字的一​​部分(例如,'1'与'11'不匹配)。如果您通过脚本执行此操作,它确实需要一些循环来构造查询,但与最初的SELECT相比,它是最小的。

答案 1 :(得分:0)

可以使用MySQL的FIND_IN_SET()函数(如果使用SET数据类型存储Rights列,这将非常有效):

DELETE FROM MYprojects WHERE
     FIND_IN_SET( 2, Rights)
  OR FIND_IN_SET( 4, Rights)
  OR FIND_IN_SET(65, Rights)
  OR FIND_IN_SET(34, Rights)

但是,作为daghan comments,您可能应该考虑使用MySQL的关系数据库管理功能的更合适的数据结构。