我有两张表:候选人表存储候选人信息和表candidate_subjects存储结果。我想从两个表查询和网页如何在php和MySQL中提高查询速度以便快速显示
CREATE TABLE candidate_subjects (
id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
candidate_id INT(11),
exam_type_id INT(10),
subject_id INT(10),
ca_score INT(11),
exam_score INT(6),
score_grade VARCHAR(10),
date_created VARCHAR(10),
date_modified TIMESTAMP
);
INSERT INTO `candidate_subjects` (`id`, `candidate_id`, `exam_type_id`,
`subject_id`, `ca_score`, `exam_score`, `score_grade`, `date_created`,
`date_modified`) VALUES
(1, 2, 1, 32, 22, 61, A, '2017-02-01', '2017-08-28 13:10:33'),
(2, 2, 1, 5, 21, 38, B, '2017-02-01', '2017-08-28 13:10:33'),
(3, 2, 1, 14, 21, 51, A, '2017-02-01', '2017-08-28 13:10:33'),
(4, 2, 1, 1, 19, 34, B, '2017-02-01', '2017-08-28 13:10:33'),
(5, 2, 1, 2, 23, 39, B, '2017-02-01', '2017-08-28 13:10:33'),
(6, 2, 1, 38, 20, 32, B, '2017-02-01', '2017-08-28 13:10:33'),
(7, 2, 1, 53, 24, 47, A, '2017-02-01', '2017-08-28 13:10:33'),
(8, 4, 1, 32, 19, 61, A, '2017-02-01', '2017-08-28 13:11:27'),
(9, 4, 1, 5, 22, 41, B, '2017-02-01', '2017-08-28 13:11:27'),
(10, 4, 1, 14, 20, 46, A, '2017-02-01', '2017-08-28 13:11:27'),
(11, 4, 1, 1, 23, 37, B, '2017-02-01', '2017-08-28 13:11:27'),
(12, 4, 1, 2, 21, 36, B, '2017-02-01', '2017-08-28 13:11:27'),
(13, 4, 1, 38, 22, 34, B, '2017-02-01', '2017-08-28 13:11:27'),
(14, 4, 1, 53, 24, 52, A, '2017-02-01', '2017-08-28 13:11:27'),
(15, 5, 1, 32, 20, 62, A, '2017-02-01', '2017-08-28 13:11:44'),
(16, 5, 1, 5, 22, 38, B, '2017-02-01', '2017-08-28 13:11:44');
CREATE TABLE candidates (
id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
exam_no VARCHAR(15),
surname VARCHAR(50),
other_names VARCHAR(100),
school_id INT(11),
registration_completed INT(11),
exam_scores_completed INT(5),
remark VARCHAR(10)
);
INSERT INTO candidates (id, exam_no, surname, other_names, school_id,
registration_completed, exam_scores_completed, remark) VALUES
(1, '1171052001', 'ABADO', 'MASENENGEN', 1052, 1, '1', 'RESIT'),
(2, '1170938001', 'AGBA', 'NGUHER', 938, 1, '1', 'FAIL'),
(3, '1170071001', 'ABEE', 'SESUUR', 71, 1, '1', 'PASS'),
(4, '1170938002', 'AHEN', 'REBECCA DOOSUUN', 938, 1, '1', 'PASS');
我有得到考生的等级在candidate_subjects表中的主题功能上显示的结果。
function getgradebycandsub($candidate_id, $sub){
$s = "SELECT score_grade FROM `candidate_subjects` WHERE candidate_subjects.candidate_id='$candidate_id' AND candidate_subjects.subject_id='$sub'";
$r = mysql_query($s);
$c = mysql_fetch_array($r);
return $c['score_grade'];
}
我有以下循环:
$s = "SELECT id, exam_no, surname, other_names, remark FROM candidates ORDER BY surname";
$r = mysql_query($s);
echo "<tr><td align='center'>S/N</td><td align='center'>EXAM NO.</td><td align='center'>NAMES OF CANDIDATES</td><td align='center'>ENG</td><td align='center'>MATH</td><td align='center'>B.STD</td><td align='center'>C.ART</td><td align='center'>FREN</td><td align='center'>HAU</td><td align='center'>BST</td><td align='center'>ARAB</td><td align='center'>P.VOC</td><td align='center'>R.N.V</td><td align='center'>REMARK</td></tr>";
while ($candidates = mysql_fetch_array($r)) {
echo "<tr>";
echo "<td height='30'>" . ++$sno . "</td>";
echo "<td>" . $candidates['exam_no'] . "</td>";
echo "<td>" . $candidates['surname'] . " " . $candidates['other_names'] . "</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '1')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '2')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '5')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '14')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '22')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '53')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '32')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '33')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '38')."</td>";
echo "<td align='center'>".getgradebycandsub($candidates['id'], '27')."</td>";
echo "<td align='center'>".$candidates['remark']."</td>";
echo "</tr>";
}
我的挑战是,它需要5个小时,显示4000条记录。 UPDATE
期望的输出是S/No,考试编号,姓名,ENG,MATH,B.STD,C.ART,FREN,HAU,BST,ARAB,P.VOC,R.N.V,备注。这是候选人的详细信息,如考试编号,姓名,成绩在科目和备注
使用'join'来显示表格数据的 –
@RameshS这很棒。你能帮忙说明一下吗?谢谢 – AMM
@AMM我已经发布了解释'JOIN'使用的答案。让我知道,如果你有任何疑问。 – Ravi