首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语句检查是否允许用户

问SQL语句检查是否允许用户
EN

Stack Overflow用户
提问于 2019-04-08 09:03:57
回答 2查看 50关注 0票数 0

我有以下三张表:

templatesubscription <

代码语言:javascript
复制
table template:
id | name

table user
id | name | ...

table templatesubscriptions
id | template_id | user_id
  • 每个用户可以有n个模板订阅。
  • 每个模板订阅可以有一个用户。
  • 每个模板都有n个模板订阅。
  • 每个模板订阅都有一个模板。

现在,我想检查当前登录的用户(用户ID = 10)是否可以使用ID = 0编辑模板。只有当用户有此模板的模板订阅时,他才能编辑它。

现在我可以问两个问题了。首先,我将使用模板id获取当前用户的模板订阅:

代码语言:javascript
复制
SELECT * FROM templatesubscription WHERE user_id = 10 AND template_id = 0

现在我可以检查返回值是否为null,如果是,用户将得到一条错误消息。如果结果不是空的,我将得到模板表的模板:

代码语言:javascript
复制
SELECT * FROM templates WHERE id = 0

但这种方法对我来说并不是很好。我能把这两种说法合并在一起吗?如果用户没有此模板的模板订阅,则返回值应为模板或null。

EN

回答 2

Stack Overflow用户

发布于 2019-04-08 09:08:30

您可以使用where条件将两者结合在一起。只要用户有权限,就会有输出。

代码语言:javascript
复制
SELECT * 
FROM templates 
WHERE id = 0 and 1=(SELECT 1 FROM templatesubscription WHERE user_id = 10 AND template_id = 0)
票数 0
EN

Stack Overflow用户

发布于 2019-04-08 09:08:40

学习有关联接的知识,here's a good overview。

因此,在您的示例中,您希望在订阅和模板之间进行内部连接,以便只获得用户可以访问的订阅:

代码语言:javascript
复制
SELECT t.* -- it's better to list all the columns than use *
  FROM templates t
 INNER
  JOIN templatesubscription ts
    ON t.id = ts.template_id
 WHERE ts.user_id = 10
   AND ts.template_id = 0

因此,只有在templates表的templatesubscription中有该user_id的记录时,这才会返回该行。

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

https://stackoverflow.com/questions/55569754

复制
相关文章

相似问题

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