0

ここで私と一緒に耐えてください-これは少し混乱するかもしれません。

SQLを使用して2セットのデータを取得しています。クエリを含むコードは次のとおりです。ZendFrameworkを使用しています。

$assignments = $db->fetchAll("SELECT id,name,class FROM assignments");
foreach($assignments as $a) {
    $assignmentID = $a['id'];
    $studentData = $db->fetchAll(
        "SELECT student,assignment,status,assignmentID FROM student_assignments WHERE assignmentID='$assignmentID'"
    );

    echo "<th>".$a['name']."</th>";

    foreach($studentData as $s) {
        $bottom .= "<tr><td>" . $s['student'] . " " . $s['assignmentID'] 
                   . " ".$s['status'] . "</td></tr>";
        $i++;
    }
}
echo "</tr>$bottom;";

HTMLでの出力は次のようになります。

|Assignment on 07/07/2012|  |Assignment on 07/12/2012|   |Assignment on 07/15/2012|
117 1 Y
332 1 N
36 1 N
420 1 N
332 1 Y
326 2 N
212 2 N
461 2 N
117 2 N
212 2 N
212 3 N
326 3 N
117 3 Y
420 3 Y

これで上部がうまく機能し、データベース内の各割り当てが動的に表示されます。しかし、私はこれらの列の下に表示する適切なデータを取得する方法を見つけようとしてきましたが、効果はありません。これは、私がそれをいくらか正しく見えるようにするために得た最も近いものです。

基本的に、中央に「2」と「3」があるデータは、それぞれ2列目と3列目に入る必要があります。ただし、各割り当てのデータではなく、すべてのデータが$ bottom変数に格納されるため、これは発生しません。

誰か提案はありますか?これは私を夢中にさせています、そして私は解決策が私を正面から見つめているように感じます。

ありがとう!

4

1 に答える 1

1

まず、すべての生徒の課題を繰り返し処理し、課題テーブルをそのテーブルに残して結合して、関連する課題の名前を確認できるようにします。

$students = $db->fetchAll('SELECT sa.student,sa.assignment,sa.status,sa.assignmentID,a.name
                           FROM student_assignments AS sa
                           LEFT JOIN assignments AS a ON sa.assignmentID=a.id');

次に、結果を使用して、同じ割り当てを持つ全員を再グループ化するための配列を作成できます。

$columns = Array();
foreach($students as $s) {
    $row = '<tr><td>'.$s['student'].' '.$s['assignmentID'].' '.$s['status'].'</td></tr>';
    array_push($columns[$s['name']], $row);
}

次に、この配列を使用して、最終的にコンテンツを印刷できます。

foreach ($columns as $key=>$value) {
    echo '<th>'.$key.'</th>';
    foreach ($value as $v) {
        echo $v;
    }
}

もちろん、これはよりコンパクトにすることができ(ネストされたループに縮小)、完全にテストする方法はありませんが、プロセスで役立つはずです;)

于 2012-07-17T22:45:10.707 に答える