私は次のように2つのテーブルを持っています-
CREATE TABLE IF NOT EXISTS `nl_members` (
`member_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`member_email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`member_confirmation_code` varchar(35) COLLATE utf8_unicode_ci NOT NULL,
`member_enabled` enum('Yes','No') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Yes',
PRIMARY KEY (`member_id`),
UNIQUE KEY `TUC_nl_members_1` (`member_email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=58520 ;
CREATE TABLE IF NOT EXISTS `nl_member_group_xref` (
`group_id` int(10) unsigned NOT NULL,
`member_id` int(10) unsigned NOT NULL,
`member_subscribed` enum('Yes','No') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Yes',
`subscribe_date` int(10) unsigned NOT NULL DEFAULT '0',
`unsubscribe_date` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`group_id`,`member_id`),
KEY `nl_members_nl_member_group_xref` (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `nl_member_group_xref`
ADD CONSTRAINT `nl_members_nl_member_group_xref` FOREIGN KEY (`member_id`) REFERENCES `nl_members` (`member_id`),
ADD CONSTRAINT `nl_member_groups_nl_member_group_xref` FOREIGN KEY (`group_id`) REFERENCES `nl_member_groups` (`group_id`);
どちらにも、数百万ものデータが大量にあります。
私が望んでいるのは、結果セットにマイナスを適用することでした。
例えば、
ID:1のGroup1からすべてのユーザーを取得したいマイナスID:2のGroup2とID:3のGroup3のすべてのユーザーを取得したい
どうすれば効率的にそれを行うことができますか?クエリは可能な限り高速に実行されます。
アップデート
私が欲しいのはこんな感じです-
メンバーテーブル'nl_members'に、1つ以上のグループに関連付けられている可能性のあるすべてのメンバーのリストを保持します。
メンバーのグループの関連付けごとに、「nl_member_group_xref」テーブルに行があります。
したがって、メンバーが3つのグループに関連付けられている場合、member_group_xrefテーブルには3つのエントリがあります。
今私が欲しいのは、すべてのメンバーをグループ1に含め、メンバーがグループ2とグループ3にも属している場合はメンバーを除外することです。
お役に立てれば。