需要更高效的SQL查询方法

时间:2015-02-11 13:02:15

标签: php mysql

我有一张包含数据的表格

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在表格中显示每个人,其中类作为整个表单的列。

每个表格单元格的第X行列都有一个表单元素,其中的点可以在其中进行更新。

我从此处获取的代码在从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>";

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

提前致谢

史蒂夫

1 个答案:

答案 0 :(得分:0)

提示:您尝试显示的表格的行话是&#34; pivot&#34;表,其中某些行(在您的情况下为class)被旋转,因此它们是列。知道这可以帮助您找到合适的教程。一些RDMS系统/不是MySQL /支持其查询系统中的数据透视表。

提示:不要在列名中使用像空格一样的古怪字符。它谴责你在查询中使用反复的暴风雪。

提示:一般不要使用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数组中查找主题位置。