需要一种更高效的SQL查询方法


A More Efficient SQL Query method needed

我有一个表,里面有这样的数据

UID UPN Reg Surname Forename    Class   Teacher     Subject code    Points
1   UPN111  10B BLOGGS  Joe PU/Thu:1    Mrs A RIGNALL   Ph            5
2   UPN111  10B BLOGGS  Joe 10u/En2     Mr D THORNBER   En            2
3   UPN111  10B BLOGGS  Joe 10u/Ma1     Miss J ANDERSON Ma            4
4   UPN111  10B BLOGGS  Joe 10u/Pe1     Ms J L SHARPLES Pe            4
5   UPN111  10B BLOGGS  Joe 10u/Re1     Ms  M HURST     Re            3
6   UPN111  10B BLOGGS  Joe 10u/Bi1     Mrs A RIGNALL   Bi            5
7   UPN111  10B BLOGGS  Joe 10u/Ch1     Mrs  ARIGNALL   Ch            0
8   UPN111  10B BLOGGS  Joe 10A/Pa1     Miss O NELSON   Pa            1
9   UPN111  10B BLOGGS  Joe 10B/Hi1     Miss C MEDOWS   Hi            2
10  UPN111  10B BLOGGS  Joe 10C/Gg1     Mr A  RHODES    Gg            10
11  UPN111  10B BLOGGS  Joe 10ux/Ps1    Mrs B TAYLOR    Ps            5
12  UPN111  10B BLOGGS  Joe CLS 11F     Mrs L ROBINSON                6

我需要在一个表中按UPN显示每个人,其中类作为整个表单的列

每个表格单元格Row X Column都有一个带点的表单元素,然后可以在其中进行编辑以进行更新。

我的代码在从msyql数据库中提取所有数据方面似乎非常慢,这是因为我添加了查询来获取积分数据。

$query = mysql_query("SELECT * FROM `table 2` WHERE `Reg` = '".$_GET['f']."' group by `UPN`");
$squery = mysql_query("SELECT DISTINCT `Subject Code` FROM `table 2`");
$dquery = mysql_query("SELECT * FROM `table 2` WHERE `Reg` = '".$_GET['f']."'");
echo "<form><table>";
echo "<tr><td>Name</td>";
//HEADER
while($subjecth = mysql_fetch_array($squery)){
echo "<td>|".$subjecth['Subject Code']."</td>";
}
//DATA
while($form = mysql_fetch_array($query)){
echo "<tr>";
echo "<td>".$form['Forename']." ".$form['Surname']."</td>";

$pquery = mysql_query("SELECT DISTINCT `Subject Code` FROM `table 2`");
while($subjects = mysql_fetch_array($pquery)){
$data = mysql_fetch_array(mysql_query("SELECT * FROM `table 2` WHERE `UPN` = '".$form['UPN']."' AND `Subject Code` = '".$subjects['Subject Code']."'"));
if($data['Points'] == NULL){
    echo "<td></td>";
}
else {
echo "<td><input type='"text'" id=".$form['UPN']."-".$subjects['Subject Code']." size='"3'" value='"".$data['Points']."'"></td>";
}
}
}
echo "</table></form>";

有没有更有效的方法来查询我需要的数据并将其插入页面?

提前感谢

Steve

提示:您试图显示的表的行话是"透视"表,其中某些行(在您的情况下为class)被透视,因此它们是列。了解这一点可能会帮助您找到合适的教程。一些RDMS系统/而不是MySQL/在其查询系统中支持透视表。

提示:不要在列名中使用空格之类的奇怪字符。它谴责您在查询中使用大量的backticks。

提示:一般不要使用SELECT *。它获取数据,然后丢弃这些数据。这会减慢速度。

查询越少越好,即使结果集包含一些重复的数据。似乎你需要每个主题都有一个专栏。所以,我建议你先给自己取一份这些主题的列表,然后把它放进一个数组中。

$subject_position = Array();
$position = 0;
$pquery = mysql_query("SELECT DISTINCT `Subject Code` FROM `table 2` ORDER BY `Subject Code`");
while($result = mysql_fetch_array($pquery)){
    $sub = $result['Subject Code'];
    $subject_position[$sub] = $position;
    $position = $position + 1;
}

然后,发出一个查询,获取单个结果集中所需的所有结果,按upn排序,然后按主题排序。处理该结果集的行。只要upn发生更改,就启动一个新表。

对于每一行,您可以获取主题,然后在$subject_position数组中查找主题的位置。