-1

私は、学生に関するさまざまな情報を各行に表示する 12 列のテーブルを含む Web サイトに取り組んでいます。PASSFAIL、またはBLANK学生がまだ試験を書いていない場合はそのままにする13番目の列を追加しようとしています。

私の MSSQL データベースには 2 つのテーブルがあります。T1 (Students) には、学生に関するさまざまな情報が含まれており、Web サイト テーブルが学生ごとに行をグループ化するために使用している keyId (主キー) があります。生徒が試験を書くと、同じテーブルに生徒番号が割り当てられます (そうでない場合NULL)。この学生番号は、2 番目のテーブルの主キーであり、値PASSまたはFAIL関連付けられています。

編集: 2 番目の表の合格または不合格のデータは、教師が生徒番号を入力して合格または不合格を選択する別のタブの Web サイトから挿入されます。

Status 列のデータ型 (合格または不合格) は enum(string) P & F です。

<?php 

$objMSSQL = new cMSSQL(); 

//[...] 

for($i = 0; $i < $noOfRows; $i++)
    $noOfRows = $objMSSQL->getAffectedRows();

//[...]

$examStatus = $objMSSQL->getTable("
    SELECT * 
    FROM [Students] 
    INNER JOIN [Exams] ON Exams.studentNo = Students.studentNo
")

if ($examStatus[$i][Status] == 'PASS')
    echo '<td width="80px"> PASS </td>';
elseif ($examStatus[$i][Status] == 'FAIL')
    echo '<td width="80px"> FAIL </td>';
else
    echo '<td width="80px"></td>';

?>

私は解決策を際限なく探してきましたが、ウェブサイトに正しく表示されない理由がわかりません (合格または不合格が一見ランダムに表示され、何も空白のままになっています)。

4

3 に答える 3

0

編集:上記のコードをコピーし、適切な関数を使用して必要な部分を追加しました。(必要に応じて調整/編集/名前を変更して、正しく動作/表示します)。

別の例を次に示します: PHP で動的テーブルを作成する

これを例として使用して、PHP で動的テーブルを作成できます。

<?php 

$objMSSQL = new cMSSQL(); 

//[...] 

for($i = 0; $i < $noOfRows; $i++)
    $noOfRows = $objMSSQL->getAffectedRows();

//[...]

$examStatus = $objMSSQL->getTable("
    SELECT * 
    FROM [Students] 
    INNER JOIN [Exams] ON Exams.studentNo = Students.studentNo
")

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
       print '<tr>'
      .'<td>' . $row['col1'] . '</td>'
      .'<td>' . $row['col2'] . '</td>'
      .'<td>' . $row['col3'] . '</td>'
      .'<td>' . $row['colx'] . '</td>'
      .'</tr>';
}

?>

したがって、基本的にはクエリ結果をループしています。学生テーブルに参加しているため、PASS/FAIL データにアクセスできます。おそらく「*」は使用せず、代わりに各テーブルから必要な列をリストします。

さて、あなたのコードの残りの部分が正しいか、必要なもの(FORループなど)が正しいかどうかはわかりません。テーブルを作成してデータを出力するには、WHILEループが必要です。

于 2013-01-31T16:38:37.343 に答える
0

可変/動的な列数が必要な場合は、垂直テーブルレイアウトを検討する必要があります

于 2013-01-31T16:48:36.017 に答える
0

SQL クエリでは、そこに 13 列を追加できます。何かのようなもの:

SELECT *, CASE WHEN EXAM_SCORE > 70.00 then 'PASS'
               WHEN EXAM_SCORE < 70.00 then 'FAIL'
               else ''
               END EXAM_SCORE as PassFail
FROM [Students] INNER JOIN [Exams] ON Exams.studentNo=Students.studentNo
于 2013-01-31T15:03:58.860 に答える