回答編集履歴
4
修正
    
        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
修正
    
        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整理
    
        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 | 
            -
             | 
| 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
修正
    
        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
         | 
