以下のようなテーブルがあったとして(外部キーやインデックス指定などは省略)。
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`sex` char(1) NOT NULL,
`birthday` date NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `user_groups` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL,
`group_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `groups` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
「ユーザーを特定の条件で絞り込みたい+それらのユーザーが属するグループも一緒に出力したい」」みたいな要件はよくあることで、そういう場合の処理としては、以下のようなプログラムを書くことになるわけだが。
別にこの方法が間違っているとは思わないけど、他に方法はあったりするのかしら?
users と user_groups を結合して、無理矢理一度のクエリでレコードを取得することもできなくはないけど、その場合 users のレコードが user_groups のレコード分増殖するので、グルーピングや検索条件が複雑化すると意図せぬバグを埋め込んだり、コードの見通しが悪くなりそうなのが心配なんだよなぁ