回答編集履歴

4

修正

2019/08/05 02:21

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,3 +1,33 @@
1
+ > ・課題1の提出数と未提出数が、課題2以降にも表示されている(SQL文,phpから間違っているが、改善方法がわからない)
2
+
3
+
4
+
5
+ $testも$test2も課題番号で絞られていないので
6
+
7
+ $testは「teisyutsu = 1で絞り込まれた全件の合計件数」が取得されます。
8
+
9
+ $test2は「hyoka IS NULLで絞り込まれた全件の合計件数」が取得されます。
10
+
11
+
12
+
13
+ SQLはPHPからすると外部の仕組みですので、「どういう情報が取得できるか」は
14
+
15
+ DBに対して直に実行して確認すると良いです。
16
+
17
+
18
+
19
+ ですので、取得できているのは「課題1の提出数と未提出数」ではありません。全部です。
20
+
21
+
22
+
23
+ もちろん、$rowsを取得しているSQLも確認すべきですね。
24
+
25
+
26
+
27
+ # 根本解決
28
+
29
+
30
+
1
31
  テーブル定義が不明ですがGROUP BYとサブクエリ使ってSQL一発で出せそうに思います。
2
32
 
3
33
 

3

修正

2019/08/05 02:21

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -58,7 +58,9 @@
58
58
 
59
59
  WHERE
60
60
 
61
- hyoka IS NULL
61
+ -- hyoka IS NULL
62
+
63
+ teisyutsu = 0
62
64
 
63
65
  GROUP BY
64
66
 

2

SQL整理

2019/08/05 01:35

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -6,28 +6,72 @@
6
6
 
7
7
  ```SQL
8
8
 
9
- SELECT
9
+ SELECT
10
10
 
11
- a.kadai_num
11
+ a.kadai_num,
12
12
 
13
- , COUNT(t.kadai_num) AS teisyutsu_count
13
+ COUNT(t.kadai_num) AS teisyutsu_count,
14
14
 
15
- , COUNT(h.kadai_num) AS miteisyutsu_count
15
+ COUNT(h.kadai_num) AS miteisyutsu_count
16
16
 
17
- FROM kadai a
17
+ FROM
18
18
 
19
- LEFT JOIN kadai t on
19
+ kadai a
20
20
 
21
- a.kadai_num = t.kadai_num
21
+ LEFT JOIN(
22
22
 
23
- AND t.teisyutsu = '1'
23
+ SELECT
24
24
 
25
- LEFT JOIN kadai h on
25
+ kadai_num,
26
26
 
27
- a.kadai_num = h.kadai_num
27
+ COUNT(*)
28
28
 
29
- AND h.hyoka IS NULL
29
+ FROM
30
30
 
31
+ kadai
32
+
33
+ WHERE
34
+
35
+ teisyutsu = 1
36
+
37
+ GROUP BY
38
+
39
+ kadai_num
40
+
41
+ ) t
42
+
43
+ ON
44
+
45
+ a.kadai_num = t.kadai_num
46
+
47
+ LEFT JOIN(
48
+
49
+ SELECT
50
+
51
+ kadai_num,
52
+
53
+ COUNT(*)
54
+
55
+ FROM
56
+
57
+ kadai
58
+
59
+ WHERE
60
+
61
+ hyoka IS NULL
62
+
63
+ GROUP BY
64
+
65
+ kadai_num
66
+
67
+ ) h
68
+
69
+ ON
70
+
71
+ a.kadai_num = h.kadai_num
72
+
73
+ GROUP BY
74
+
31
- GROUP BY a.kadai_num
75
+ a.kadai_num
32
76
 
33
77
  ```

1

修正

2019/08/05 01:33

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  SELECT
10
10
 
11
- kadai_num
11
+ a.kadai_num
12
12
 
13
13
  , COUNT(t.kadai_num) AS teisyutsu_count
14
14