- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有趣的问题,但是我不知道如何更好地表达它,而不是说我有一个需要返回多列的子查询。当我尝试执行此操作时,PostgreSQL 会抛出一个错误,因此虽然我的 SQL 在我看来在逻辑上有些合理 - 显然有更好的方法来执行此操作。我正在尝试将用户权限合并到一个表中(希望将其放入一个 View 或什至是某种“物化 View ”)。这是我的表格:
CREATE TABLE users (
user_id integer NOT NULL,
username character varying(32) NOT NULL,
passwd character varying(32) NOT NULL,
dept_id integer NOT NULL,
last_activity timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT "pk-users-user_id" PRIMARY KEY (user_id)
);
CREATE TABLE groups (
group_id integer NOT NULL,
group_name character varying(32) NOT NULL,
add_posts integer NOT NULL DEFAULT 0,
remove_posts integer NOT NULL DEFAULT 0,
modify_users integer NOT NULL DEFAULT 0,
add_users integer NOT NULL DEFAULT 0,
delete_users integer NOT NULL DEFAULT 0,
CONSTRAINT "pk-groups-group_id" PRIMARY KEY (group_id)
);
CREATE TABLE user_groups (
user_id integer NOT NULL,
group_id integer NOT NULL,
CONSTRAINT "fk-user_groups-group_id" FOREIGN KEY (group_id)
REFERENCES groups (group_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT "fk-user_groups-user_id" FOREIGN KEY (user_id)
REFERENCES users (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
);
CREATE TABLE user_rights (
user_id integer NOT NULL,
add_posts integer NOT NULL DEFAULT 0,
remove_posts integer NOT NULL DEFAULT 0,
modify_users integer NOT NULL DEFAULT 0,
add_users integer NOT NULL DEFAULT 0,
delete_users integer NOT NULL DEFAULT 0,
CONSTRAINT "fk-user_rights-user_id" FOREIGN KEY (user_id)
REFERENCES users (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE
);
以及填充它们的一些数据:
INSERT INTO users(user_id, username, passwd, dept_id) VALUES (1, 'nicole','123456',12);
INSERT INTO users(user_id, username, passwd, dept_id) VALUES (2, 'john','324634',11);
INSERT INTO users(user_id, username, passwd, dept_id) VALUES (3, 'susan','61236',14);
INSERT INTO users(user_id, username, passwd, dept_id) VALUES (4, 'mary','1213612',2);
INSERT INTO user_rights(user_id, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (1,0,0,1,1,1);
INSERT INTO user_rights(user_id, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (2,1,1,1,1,1);
INSERT INTO user_rights(user_id, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (3,0,0,0,0,0);
INSERT INTO user_rights(user_id, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (4,0,0,0,0,0);
INSERT INTO groups(group_id, group_name, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (1,'Poster',1,1,0,0,0);
INSERT INTO groups(group_id, group_name, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (2,'User Mgr',0,0,1,1,1);
INSERT INTO groups(group_id, group_name, add_posts, remove_posts, modify_users, add_users, delete_users) VALUES (3,'Admin',1,1,1,1,1);
INSERT INTO user_groups(user_id, group_id) VALUES (1,1);
INSERT INTO user_groups(user_id, group_id) VALUES (2,2);
INSERT INTO user_groups(user_id, group_id) VALUES (3,2);
INSERT INTO user_groups(user_id, group_id) VALUES (4,3);
INSERT INTO user_groups(user_id, group_id) VALUES (1,2);
我想做的是创建一个可以计算用户可能拥有的有效权限的查询。用户存储在(您猜对了)“用户”表中。 “groups”中的组,用户可能被分配到的任何组都在“user_groups”中。最后,每个用户都可以拥有覆盖组权限的个人权限 - 这些权限存储在“user_rights”中。
我可以使用以下方法查询所有这些信息(是的,我知道这很丑陋):
select
max(add_posts) as add_posts,
max(remove_posts) as remove_posts,
max(modify_users) as modify_users,
max(add_users) as add_users,
max(delete_users) as delete_users
from
(
select
max(add_posts) as add_posts,
max(remove_posts) as remove_posts,
max(modify_users) as modify_users,
max(add_users) as add_users,
max(delete_users) as delete_users
from
groups
where
group_id in (select group_id from user_groups where user_id = 3)
union all
select
max(add_posts) as add_posts,
max(remove_posts) as remove_posts,
max(modify_users) as modify_users,
max(add_users) as add_users,
max(delete_users) as delete_users
from
user_rights
where
user_id = 3
) as combined_user_groups
如果给出上述数据,将为我在 WHERE 子句中指定的任何用户提供有效权限。我想要做的是创建一个物化 View ,该 View 仅在用户或组数据更改时更新,否则是静态的。我知道怎么做没有问题——我遇到的问题是生成这个 View 。我的想法是使用上面的查询 - 但让它为“用户”表中的每个用户运行并创建一个“user_id”列。所以我的“effective_permissions”表看起来像这样:
user_id, add_posts, remove_posts, modify_users, add_users, delete_users
1 1 1 1 1 1
2 1 1 1 1 1
3 0 0 1 1 1
..等等。我只是不知道如何将 user_id 添加到此结果并显示多行。我希望我已经提供了足够的信息让别人了解我正在尝试做什么。我意识到,一旦表格按大小分组,最终这种方法在性能方面可能会变得相当昂贵 - 而这个解决方案似乎是我能想到的缓解该问题的最佳解决方案。
如果您想为测试目的重新创建样本数据,所提供的示例应该可以使用(我只是在我的本地 pg 服务器上快速重建它,尽管它比适用相同概念的真实表简单得多)。
最佳答案
select
user_id
max(add_posts) as add_posts,
max(remove_posts) as remove_posts,
max(modify_users) as modify_users,
max(add_users) as add_users,
max(delete_users) as delete_users
from
(
select
ug.user_id
max(g.add_posts) as add_posts,
max(g.remove_posts) as remove_posts,
max(g.modify_users) as modify_users,
max(g.add_users) as add_users,
max(g.delete_users) as delete_users
from
groups g
inner join
users_groups ug
on g.group_id = ug.group_id
group by
ug.user_id
union
select
user_id
max(add_posts) as add_posts,
max(remove_posts) as remove_posts,
max(modify_users) as modify_users,
max(add_users) as add_users,
max(delete_users) as delete_users
from
user_rights
group by
user_id
) as combined_user_groups
group by
user_id
关于sql - 子查询返回多列 - 或近似值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085750/
我想近似 前 功能。 是否可以使用基于多个样条类型的方法来做到这一点?即在 之间x1 和 x2 , 然后 y1 = a1x + b1, between x2 and x3, 那么 y2 = a2x +
我正在尝试使用 selenium IDE,并且遇到了断言近似值的问题。我需要检查带有 id 的元素内的值。它是以逗号(“,”)作为分隔符的数值。 问题是我需要检查数值是否有效,容差为 0.01。 例如
我正在寻找一种算法(最好是在 Go 或 C 中)以在可能的分母(dmin,dmax with 1 dmax: break 有些软件,例如 Microsoft Excel,会使用分数
我想尝试寻找解决旅行商问题的启发式/近似方法,为了做到这一点,我正在寻找一些“硬”TSP 实例(连同它们最著名的解决方案),以便我可以尝试解决它们,看看我能做多好。 理想情况下,它们只是基于文本的邻接
我想要一个 VBA 查看单元格并使用 % 确定单词 XXX 是否出现在其中的任何位置。如果是,我希望 VBA 将整个单元格更改为单词 YYY。 谁能帮我解决这个问题? 最佳答案 如果您只需要更改 1
我有最后一组图 block ,其中每条边都可以有四种颜色。 任务是从这个瓷砖的给定集合(有限)中找到最大可能的正方形构建。瓷砖可以旋转。 我需要设计 3 种算法来为这个任务找到解决方案。一个完全和两个
我正在使用该系列近似 PI: 该系列的函数如下所示: (defn- pi-series [k] (/ (if (even? (inc k)) 1 -1) (dec (* 2 k))))
基本上,我一直在尝试制作两个近似函数。在这两种情况下,我都输入了“x”和“y”组件(以处理那些讨厌的 n/0 和 0/0 条件),并且需要获得 Signed Char 输出。在 ATAN2 的情况下,
我正在尝试用 C 编写 pi 的准蒙特卡洛近似值。我还不太精通它,并且正在尝试翻译我基于 python 的技能,所以我可能只是忽略了一些东西。结果我一直得到 0,我不知道为什么。我应该如何解决这个问题
我正在尝试在尾数中以 11 位精度实现快速 atan2(float)。 atan2 实现将用于图像处理。 所以最好用 SIMD 指令来实现(目标是 x86(带 SSE2)和 ARM(带 vpfv4 N
我是一名优秀的程序员,十分优秀!