首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL为每个键插入非重复的多个值

MySQL为每个键插入非重复的多个值
EN

Stack Overflow用户
提问于 2020-09-02 09:20:22
回答 1查看 27关注 0票数 1

很晚了,我的孩子哭了一整天,我希望在接下来的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多个查询。

会有仁慈的灵魂来帮助我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-02 09:43:46

首先,从您的数据结构看,(user_id, entity_id)应该是唯一的。

由于您的“无表模式更改”条件(否则我将删除id (假定为auto_increment)并将其添加为主键),因此,请创建一个唯一的索引:

代码语言:javascript
复制
CREATE UNIQUE INDEX uniq_u_e ON priviledges (user_id, entity_id)

您可能已经有重复项,因此请搜索现有问题以删除重复项,然后添加此索引。

我假设您有另一个实体表。

在以id作为其实体主键的所有实体上创建管理员(3)用户。

代码语言:javascript
复制
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)访问权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63697408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档