0

さまざまな場所でさまざまなレベルの試験の需要を示そうとしています。

ページ全体に一連の 4 つの 2 列テーブルを出力するコードがあります。

各表は、最初の列に合計登録数を示し、2 番目の列の括弧内に支払い総額を示しています。

レベルごとに表があります。各テーブルには、そのレベルの各センターの行があります。

例: 1 番目の左端の列:

A1
______________
______________
Arlington > A1
______________ 
26 (17) 
--------------
El Paso > A1 
______________
8 (8) 
--------------
White Ridge > A1
________________ 
0 (0) 
----------------
Jonestown > A1 
_______________
10 (9) 
----------------
Hochberg > A1 
_____________
5 (0) 
-------------

各試験レベルには異なるセンターが必要なので、ネストされた配列を使用しました。レベルごとにさまざまな長さのテーブルを表示できますが、SQL クエリから値を取得できません。すべてに対して 0 です。

また、テーブルの各レベルの個々のセンターを表示できません。つまり、ライン

<td class="width8">' . $centre . ' > ' . $level . '</td>

動作していません。「Array > A1」、「Array > A2」などを表示するだけです。

何か案は?

// create array
$levels = array(
    "A1" => array(
        'Arlington',
        'El Paso',
        'White Ridge',
        'Jonestown',
        'Hochberg'
    ),
    "A2" => array(
        'Arlington',
        'El Paso',
        'Hochberg'
    ),
    "B1" => array(
        'El Paso',
        'White Ridge',
        'Jonestown',
        'Hochberg'
    ),
    "B2" => array(
        'Arlington',
        'El Paso',
        'White Ridge'
    )
);

// Loop through centres and levels 
foreach ($levels as $level => $centres) {
    echo '<div id="' . $level . '_column">
                <h2 class="'.$level.'">'.$level.'</h2>';
    foreach ($centres as $centre) {
// Prepare
        $stmt1 = $db->prepare("SELECT COUNT(Centre) 
                            FROM exam 
                            WHERE exam.Centre=:centre   
                            AND exam.Level=:level");

        $stmt2 = $db->prepare("SELECT COUNT(Centre) 
                            FROM exam
                            JOIN personal 
                            ON exam.P_ID=personal.P_ID
                                WHERE personal.Paid='1' 
                            AND exam.Centre=:centre 
                            AND exam.Level=:level");

// Bind 
        $stmt1->bindParam(':centre', $centre, PDO::PARAM_STR);
        $stmt1->bindParam(':level', $level, PDO::PARAM_STR);

        $stmt2->bindParam(':centre', $centre, PDO::PARAM_STR);
        $stmt2->bindParam(':level', $level, PDO::PARAM_STR);

// Execute
        $stmt1->execute();
        $stmt2->execute();

// Fetch 
        $row = $stmt1->fetch(PDO::FETCH_ASSOC);
        $row2 = $stmt2->fetch(PDO::FETCH_ASSOC);

        echo '<table class="Font3White">
                       <tr class="Title">
                        <td class="width8">' . $centre . ' > ' . $level . '</td>
                       <tr>';

        if ($row && $row2) {
            foreach ($row as $key => $value) {
                echo '<td>';
                echo $value;
                echo '</td>';
            }

            foreach ($row2 as $key2 => $value2) {
                echo '<td> (';
                echo $value2;
                echo ')</td>';
            }

            echo '</tr>';
        }
        echo '</table>';
    } echo '</div>';
}
4

1 に答える 1