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

回答編集履歴

4

修正

2019/08/05 02:21

投稿

m.ts10806
m.ts10806

スコア80890

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

3

修正

2019/08/05 02:21

投稿

m.ts10806
m.ts10806

スコア80890

answer CHANGED
@@ -28,7 +28,8 @@
28
28
  FROM
29
29
  kadai
30
30
  WHERE
31
- hyoka IS NULL
31
+ -- hyoka IS NULL
32
+ teisyutsu = 0
32
33
  GROUP BY
33
34
  kadai_num
34
35
  ) h

2

SQL整理

2019/08/05 01:35

投稿

m.ts10806
m.ts10806

スコア80890

answer CHANGED
@@ -2,16 +2,38 @@
2
2
 
3
3
  ※構文チェックだけ通った未検証コード
4
4
  ```SQL
5
- SELECT
5
+ SELECT
6
+ a.kadai_num,
7
+ COUNT(t.kadai_num) AS teisyutsu_count,
8
+ COUNT(h.kadai_num) AS miteisyutsu_count
9
+ FROM
10
+ kadai a
11
+ LEFT JOIN(
12
+ SELECT
13
+ kadai_num,
14
+ COUNT(*)
15
+ FROM
16
+ kadai
17
+ WHERE
18
+ teisyutsu = 1
19
+ GROUP BY
20
+ kadai_num
21
+ ) t
22
+ ON
23
+ a.kadai_num = t.kadai_num
24
+ LEFT JOIN(
25
+ SELECT
26
+ kadai_num,
27
+ COUNT(*)
28
+ FROM
29
+ kadai
30
+ WHERE
31
+ hyoka IS NULL
32
+ GROUP BY
33
+ kadai_num
34
+ ) h
35
+ ON
36
+ a.kadai_num = h.kadai_num
37
+ GROUP BY
6
- a.kadai_num
38
+ a.kadai_num
7
- , COUNT(t.kadai_num) AS teisyutsu_count
8
- , COUNT(h.kadai_num) AS miteisyutsu_count
9
- FROM kadai a
10
- LEFT JOIN kadai t on
11
- a.kadai_num = t.kadai_num
12
- AND t.teisyutsu = '1'
13
- LEFT JOIN kadai h on
14
- a.kadai_num = h.kadai_num
15
- AND h.hyoka IS NULL
16
- GROUP BY a.kadai_num
17
39
  ```

1

修正

2019/08/05 01:33

投稿

m.ts10806
m.ts10806

スコア80890

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  ※構文チェックだけ通った未検証コード
4
4
  ```SQL
5
5
  SELECT
6
- kadai_num
6
+ a.kadai_num
7
7
  , COUNT(t.kadai_num) AS teisyutsu_count
8
8
  , COUNT(h.kadai_num) AS miteisyutsu_count
9
9
  FROM kadai a