액세스 시스템을 만들고 있습니다. 액세스 시스템은 사용자가 둘 이상의 그룹의 구성원이 될 수 있다는 것을 기반으로하며 도메인은 사용자가 액세스를 요청하는 곳입니다. 예를 들어 사용자는 두 그룹의 구성원 일 수 있으며이 두 그룹은 도메인에 대한 액세스 권한을 가질 수 있으며 사용자는 도메인의 구성원 일 수 있습니다. 가장 낮은 액세스 권한을 유효하게하고 싶습니다. 다른 권한보다 우선해야하는 해당 도메인에서 오른쪽 아래에있는 그룹에 추가됩니다.값의 하위 집합에서 여러 개의 최소값 선택
문제는 각 도메인을 선택하고 각 도메인에 대한 모든 액세스 권한을 얻고 싶다는 것입니다. 문제는 여러 하위 집합에서 최소값을 선택하는 것입니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
은 그래서 나는 시도했다 :
SELECT r.* FROM `domain` as d
INNER JOIN (
SELECT domain, min(`update`) FROM `right`
) r ON d.name = r.domain;
이 나에게 결과를 제공합니다
도메인 분 (update
)
사실 또 다른 시험
내가이 원하는 무엇 :
도메인 분 (update
)
사실 또 다른 시험
사실 어떤 이름
는 SQL 바이올린 링크 :는 SQL 테이블의 http://sqlfiddle.com/#!9/841183
수출 테스트 값 :
CREATE TABLE `domain` (
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`displayName` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`description` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `domain`
ADD PRIMARY KEY (`name`);
CREATE TABLE `groups` (
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_by` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `groups`
ADD PRIMARY KEY (`name`),
ADD KEY `groups_created_by_foreign` (`created_by`);
CREATE TABLE `right` (
`domain` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`group` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`read` tinyint(1) NOT NULL,
`update` tinyint(1) NOT NULL,
`create` tinyint(1) NOT NULL,
`delete` tinyint(1) NOT NULL,
`modify` tinyint(1) NOT NULL,
`execute` tinyint(1) NOT NULL,
`created_by` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `right`
ADD PRIMARY KEY (`domain`,`group`),
ADD KEY `right_group_foreign` (`group`),
ADD KEY `right_created_by_foreign` (`created_by`);
INSERT INTO `domain` (`name`, `displayName`, `description`, `created_at`, `updated_at`) VALUES
('Another test', 'Another test', NULL, '2016-08-22 12:05:06', '2016-08-22 12:05:06'),
('Some Name', 'Some Name', NULL, '2016-08-19 03:57:00', '2016-08-19 03:57:00');
INSERT INTO `groups` (`name`, `created_by`, `created_at`, `updated_at`) VALUES
('groupTest', NULL, '2016-08-22 12:06:48', '2016-08-22 12:06:48'),
('testGroup', NULL, '2016-08-19 03:56:35', '2016-08-19 03:56:35');
INSERT INTO `right` (`domain`, `group`, `read`, `update`, `create`, `delete`, `modify`, `execute`, `created_by`, `created_at`, `updated_at`) VALUES
('Another test', 'groupTest', 0, 1, 0, 0, 0, 0, NULL, '2016-08-22 12:07:02', '2016-08-22 12:07:02'),
('Another test', 'TestGroup', 1, 1, 0, 0, 0, 0, NULL, '2016-08-22 12:06:04', '2016-08-22 12:06:04'),
('Some Name', 'TestGroup', 0, 1, 0, 0, 0, 0, NULL, '2016-08-19 03:57:05', '2016-08-19 03:57:05');