Php 在mysql中匹配sustring时删除查询

Php 在mysql中匹配sustring时删除查询,php,mysql,Php,Mysql,我有一个名为“MYprojects”的表和一个名为“Rights”的列 id =>1 rights => 7,4,34,532,12,32 现在,如果“权限”列中的任何数字出现在下面的列表中,我需要删除该行 价值观 如您所见,列中的值中存在4,因此我需要删除该行。 有人能告诉我mysql查询或函数吗? 它可以通过应用循环的服务器端脚本来完成,但我需要一个优化的解决方案 谢谢 这是我能想到的最整洁的方式。正则表达式确保输入的数字是列表的一部分,而不仅仅是另一个数字的一部分(“1”与

我有一个名为“MYprojects”的表和一个名为“Rights”的列

id =>1

rights => 7,4,34,532,12,32
现在,如果“权限”列中的任何数字出现在下面的列表中,我需要删除该行 价值观

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

这是我能想到的最整洁的方式。正则表达式确保输入的数字是列表的一部分,而不仅仅是另一个数字的一部分(“1”与“11”不匹配)。如果您是通过脚本来构造查询,它确实需要一些循环,但与许多
SELECT
ing first相比,它是最小的。

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

从MyProject中删除,其中
在_集合中查找_(2,权限)
或在_集合中查找_(4,权限)
或在_集合中查找_(65,右)
或在_集合中查找_(34,右)

<>但是,你应该考虑一个更合适的数据结构,它可以利用MySQL的关系数据库管理能力。

我觉得你的数据库中可能有一个“错误”的设计。似乎存在一个1-many关系,应该由另一个“rights”表定义,该表的外键“Myprojects_id”映射到Myprojects的id字段,右字段仅为包含权限的整数(例如,您将有6个条目,如:1,7 1,4 1,34 1532 1,12 1,32,用于存储myproject1的权限7,4,34532,12,32),那么sql查询将只是一个巨大的或复杂的查询query@daghan:使用您建议的结构,
DELETE
语句可以比使用运算符“巨大或查询”更高效地表达:
DELETE MYprojects FROM MYprojects JOIN rights.MYprojects\u id=MYprojects.id WHERE rights.rights IN(2,4,65,34)。请注意,这种方法要求在删除级联时使用
定义外键关系,以便从
权限
表中清除所有记录,这反过来又需要使用InnoDB存储引擎。为了完整性起见,不使用InnoDB/外键关系,可以再次将
rights
表连接到
DELETE
查询以执行清理:
DELETE Myprojects,Myprojects中的allrights将rights.Myprojects\u id=Myprojects.id作为allrights.Myprojects\u id=Myprojects.id中的allrights.rights.rights连接到(2,4,65,34)
2,4,65,34
DELETE FROM `MYprojects` WHERE `rights` REGEXP '(^|,)2($|,)' OR `rights` REGEXP '(^|,)4($|,)' OR `rights` REGEXP '(^|,)65($|,)' OR `rights` REGEXP '(^|,)34($|,)'