很晚了,我的孩子哭了一整天,我希望在接下来的3个小时内完成这件事。我有一个3个MySQL表“实体”,“用户”,“特权”(都有他们的id作为关键字)。
表“特权”具有以下列:id(主键)、user_id、entity_id、特权
问题是当..。
我将最高权限( 3)授予用户系统应该为所有剩余实体创建新的表项(一旦您成为一个实体的"admin“,您应该是所有实体的"admin”;如果您应该已经拥有某些实体的特权(2),则应将其更改为3)。
我不能改变SQL结构,我使用的是带有PDO的PHP。我试过了,但我总是在“特权”中得到重复的条目,因为我不能使用INSERT IGNORE (是的,仍然是SQL noob)。
现在我只需要用priviledges.priviledge(3)选择所有用户,然后选择所有不同的entities.id并将它们转储到PHP数组中,然后循环foreach遍历每个"user“和"entity”。因此,我没有发送1个查询,而是以USERSxENTITIES结束,现在它有500多个查询。
会有仁慈的灵魂来帮助我吗?
发布于 2020-09-02 09:43:46
首先,从您的数据结构看,(user_id, entity_id)应该是唯一的。
由于您的“无表模式更改”条件(否则我将删除id (假定为auto_increment)并将其添加为主键),因此,请创建一个唯一的索引:
CREATE UNIQUE INDEX uniq_u_e ON priviledges (user_id, entity_id)您可能已经有重复项,因此请搜索现有问题以删除重复项,然后添加此索引。
我假设您有另一个实体表。
在以id作为其实体主键的所有实体上创建管理员(3)用户。
INSERT INTO priviledges( user_id, entity_id, priviledge)
SELECT 42 as user_id, id, 3
FROM entities
ON DUPLICATE KEY
UPDATE priviledge = 3因此这确保了用户42对所有实体具有admin(3)访问权限。
https://stackoverflow.com/questions/63697408
复制相似问题