我有一个名为“MYprojects”的表和一个名为“Rights”的列。现在我有一个以下的行
id =>1
rights => 7,4,34,532,12,32
现在我需要删除该行,如果以下是任何数字输入权限列 值
2,4,65,34
如您所见,列中的值存在4,因此我需要删除该行。 有人可以告诉我mysql查询或函数吗? 它可以通过应用循环通过服务器端脚本完成,但我需要一个优化的解决方案 感谢
答案 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的关系数据库管理功能的更合适的数据结构。