teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

けっか

2019/10/04 06:57

投稿

yambejp
yambejp

スコア117902

answer CHANGED
@@ -71,4 +71,11 @@
71
71
  group by post_id
72
72
  with rollup
73
73
  ) as sub2 using(post_id)
74
- ```
74
+ ```
75
+ - 結果
76
+
77
+ |post_id|名前|件名1|参加1|件名2|参加2|
78
+ |--:|:--|:--|--:|:--|--:|
79
+ |1|山田太郎|参加|1|不参加|0|
80
+ |2|田中花子|参加|1|参加|1|
81
+ |NULL|NULL|NULL|2|NULL|1|

2

むりやり

2019/10/04 06:57

投稿

yambejp
yambejp

スコア117902

answer CHANGED
@@ -30,4 +30,45 @@
30
30
  (1,'役員会議','山田太郎','参加','不参加'),
31
31
  (2,'役員会議','田中花子','参加','参加'),
32
32
  (3,'合同イベント','鈴木一郎','不参加','不参加');
33
+ ```
34
+
35
+ # 無理やりやってみる
36
+ ```SQL
37
+ create table at_postmeta(post_id int,meta_key varchar(10),meta_value varchar(10));
38
+ insert into at_postmeta values
39
+ (1,'イベント名','役員会議'),
40
+ (1,'名前','山田太郎'),
41
+ (1,'件名1','参加'),
42
+ (1,'件名2','不参加'),
43
+ (2,'イベント名','役員会議'),
44
+ (2,'名前','田中花子'),
45
+ (2,'件名1','参加'),
46
+ (2,'件名2','参加'),
47
+ (3,'イベント名','合同イベント'),
48
+ (3,'名前','鈴木一郎'),
49
+ (3,'件名1','不参加'),
50
+ (3,'件名2','不参加');
51
+ ```
52
+ - 検索
53
+ ```SQL
54
+ select post_id,名前,件名1,参加1,件名2,参加2
55
+ from (
56
+ select t1.post_id,
57
+ group_concat(case meta_key when "名前" then meta_value else null end) 名前,
58
+ group_concat(case meta_key when "件名1" then meta_value else null end) 件名1,
59
+ group_concat(case meta_key when "件名2" then meta_value else null end) 件名2
60
+ from at_postmeta as t1
61
+ inner join (select post_id from at_postmeta where meta_key='イベント名' and meta_value='役員会議') as t2
62
+ on t1.post_id=t2.post_id
63
+ group by post_id
64
+ ) as sub1 right join (
65
+ select t1.post_id,
66
+ sum((meta_key="件名1")*(meta_value="参加")) 参加1,
67
+ sum((meta_key="件名2")*(meta_value="参加")) 参加2
68
+ from at_postmeta as t1
69
+ inner join (select post_id from at_postmeta where meta_key='イベント名' and meta_value='役員会議') as t2
70
+ on t1.post_id=t2.post_id
71
+ group by post_id
72
+ with rollup
73
+ ) as sub2 using(post_id)
33
74
  ```

1

調整

2019/10/04 06:42

投稿

yambejp
yambejp

スコア117902

answer CHANGED
@@ -17,4 +17,17 @@
17
17
  ↓↓↓
18
18
  SUM(meta_value = '$sanka') AS cnt
19
19
  ```
20
- だと思います
20
+ だと思います
21
+
22
+ # テーブルの設計から
23
+ ```SQL
24
+ create table tbl(id int primary key,
25
+ イベント名 varchar(10),
26
+ 名前 varchar(10),
27
+ 件名1 varchar(10),
28
+ 件名2 varchar(10));
29
+ insert into tbl values
30
+ (1,'役員会議','山田太郎','参加','不参加'),
31
+ (2,'役員会議','田中花子','参加','参加'),
32
+ (3,'合同イベント','鈴木一郎','不参加','不参加');
33
+ ```