Если у меня есть простая таблица соединений пользователей и групп «многие ко многим», например:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(6) unsigned NOT NULL,
`name` varchar(16) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `user_group` (
`user_id` int(6) unsigned NOT NULL,
`group_id` int(6) unsigned NOT NULL,
PRIMARY KEY (`user_id`, `group_id`)
) DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `groups` (
`id` int(6) unsigned NOT NULL,
`name` varchar(16) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `users` (`id`, `name`) VALUES
('1', 'Michael'),
('2', 'Sarah'),
('3', 'Steven'),
('4', 'Jane');
INSERT INTO `groups` (`id`, `name`) VALUES
('1', 'M Names'),
('2', 'S Names'),
('3', 'J Names'),
('4', 'Men'),
('5', 'Women');
INSERT INTO `user_group` (`user_id`, `group_id`) VALUES
('1', '1'),
('1', '4'),
('2', '2'),
('2', '5'),
('3', '2'),
('3', '4'),
('4', '3'),
('4', '5');
Я пытаюсь выяснить, как определить, составляет ли данный набор пользователей существующийгруппа.
Например, если я запрашиваю Майкла, он возвращает группу M Names
, потому что эта группа целиком состоит из Майкла.
Если я запрашиваю (Сара, Стивен), она возвращает группу'S Names'.
Если я запрашиваю (Сара, Майкл), группа не возвращается.
Запросить группы, в которых находится данный набор пользователей, легко:
SELECT * FROM `user_group`
WHERE `user_id` in ('2', '3');
Но я не знаю, как ограничить это только группами, членами которых являются все указанные пользователи.