【问题标题】:Inserting dynamic column into website table?将动态列插入网站表?
【发布时间】:2013-01-31 14:55:18
【问题描述】:

我正在开发一个网站,该网站包含一个包含 12 列的表格,每行显示有关学生的各种信息。我正在尝试添加第 13 列,显示 PASSFAIL,如果学生尚未参加考试,则将其保留为 BLANK

在我的 MSSQL 数据库中,我有两个表。 T1(学生)包含有关学生的各种信息,并有一个 keyId(主键),这是网站表用于按学生将行分组在一起的内容。学生完成考试后,会在同一张表中为他分配一个学号(如果不是,则为NULL)。此学生编号是第二个表中的主键,其附加值为 PASSFAIL

编辑:第二个表中的数据通过或失败通过网站插入到另一个选项卡上,教师输入学生编号并选择通过或失败。

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>';

?>

我一直在无休止地寻找解决方案,但无法弄清楚为什么它没有在网站上正确显示(它似乎随机显示通过或失败,并且没有任何空白)。

【问题讨论】:

  • 你有什么具体的尝试来调试你的问题?
  • 抱歉 Aaron,我不太明白你的问题(请记住我在这方面有点初学者)。
  • 您说“我一直在无休止地寻找解决方案”。您能否更详细地描述您查找的内容、发现的内容以及为什么它没有解决您的问题。
  • 我不明白为什么我被否决了。我显然是这个网站的新手(我喜欢顺便说一句),所以如果我做错了什么或遗漏了一些信息或代码,请告诉我。
  • 你会发布 1. 一些示例数据 2. 你期望的输出 3. 你实际得到的输出。

标签: php html sql


【解决方案1】:

编辑:我已经从上面复制了您的代码,并使用适当的功能添加了您需要的部分。 (根据需要调整/编辑/重命名以正常工作/显示)。

这是另一个例子:Creating a dynamic table with 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>';
}

?>

所以它基本上是循环遍历您的查询结果。由于您要加入学生表,因此您将可以访问通过/失败数据。您可能不想使用“*”,而是列出您想要从每个表中获得哪些列。

现在,我不确定您的其余代码是否正确或您需要什么(即 FOR 循环),需要 WHILE 循环来创建表并输出数据。

【讨论】:

【解决方案2】:

在您的 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

【讨论】:

  • 因为我不知道你的表结构,所以我只是编了一个列名,但你明白了。 :-)。不确定您如何确定通过或失败。
  • 与成绩无关,在网站的另一个选项卡上,老师输入学生编号,然后点击PASS或FAIL。谢谢。
  • 您可能希望将此功能添加到您的问题中,以便人们可以从正确的角度处理它。
  • 阅读您的编辑后,我认为我的示例仍然适用于您(或类似的东西)。如果数据在第二个表中,为什么不能选择出来?
  • 这是我的问题所在,我缺乏经验让我受阻。 PASS 或 FAIL 在第二个表中,但在网站中通过或失败需要与学生 keyId 相关(以便在正确的行中)。 keyId 仅在第一个表中可用。通过该网站,输入一个学号,通过或不通过,将其插入到第二个表中。这个学号是两个表中唯一找到的东西(一旦插入到第二个表中,有一列学生有NULL但现在变成了学号,所以它基本上是一个参考)。
【解决方案3】:

如果您需要可变/动态的列数,您应该查看垂直表格布局

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多