これって親イベントはホントにいるのでしょうか?
子イベントとユーザーテーブルをリレーションする中間テーブルが
あればよいような気がします。
create tableとinsert into形式で例示いただければ
SQL文は知恵を絞れると思います。
sample
SQL
1create table event (eid int unique,ename varchar(30));
2insert into event values(1,'child event 1'),(2,'child event 2'),(3,'child event 3');
3create table user (uid int unique,uname varchar(30));
4insert into user values(1,'tanaka'),(2,'yoshida'),(3,'suzuki'),(4,'sato'),(5,'honda');
5create table event_user(eid int,uid int ,shukketu tinyint not null,nyukin tinyint not null,unique(eid,uid));
6insert into event_user values(1,1,1,1),(1,2,0,0),(1,3,1,0),(2,1,0,1),(3,4,1,0);
SQL
1select t1.uid,t1.uname
2,sum(t2.eid=1 * t2.shukketu=1) as e1s
3,sum(t2.eid=1 * t2.nyukin=1) as e1n
4,sum(t2.eid=2 * t2.shukketu=1) as e2s
5,sum(t2.eid=2 * t2.nyukin=1) as e2n
6,sum(t2.eid=3 * t2.shukketu=1) as e3s
7,sum(t2.eid=3 * t2.nyukin=1) as e3n
8 from user as t1
9left join event_user as t2 on t1.uid=t2.uid
10group by t1.uid
11
プロシージャとピボットとか使うともうちょい自動化してそれっぽく見えるかも
procudure
SQL
1drop procedure if exists my_proc;
2delimiter //
3create procedure my_proc()
4begin
5declare a int;
6declare b varchar(100);
7declare done int default 0;
8declare cur cursor for
9select eid,ename from event order by eid;
10declare continue handler for sqlstate '02000' set done=1;
11
12set @sql='select t1.uid,t1.uname\n';
13open cur;
14repeat
15fetch cur into a,b;
16if not done then
17set @sql=concat (@sql,',sum(t2.eid=',a,' * t2.shukketu=1) as `',b,' shukketu`\n');
18set @sql=concat (@sql,',sum(t2.eid=',a,' * t2.nyukin=1) as `',b,' nyukin`\n');
19end if;
20until done end repeat;
21close cur;
22set @sql=concat (@sql,' from user as t1\n');
23set @sql=concat (@sql,' left join event_user as t2 on t1.uid=t2.uid\n');
24set @sql=concat (@sql,' group by t1.uid\n');
25prepare stmt from @sql;
26execute stmt;
27end
28//
29delimiter ;
30