0

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

id =>1

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

现在,如果以下值中出现任何编号权限列,我需要删除该行

2,4,65,34

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

4

2 回答 2

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

是我能想到的最简洁的方式。正则表达式确保输入的数字是列表的一部分,而不仅仅是另一个数字的一​​部分(例如,“1”与“11”不匹配)。如果您通过脚本执行查询,它确实需要一些循环来构建查询,但与首先进行大量SELECTing 相比,它是最小的。

于 2012-05-29T12:21:49.847 回答
0

可以使用 MySQL 的函数(如果使用数据类型存储列FIND_IN_SET(),这将特别有效):RightsSET

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 评论的那样,您可能应该考虑一种更合适的数据结构,它可以利用 MySQL 的关系数据库管理功能。

于 2012-05-29T12:21:59.040 回答