2014-12-05 20 views
0
CREATE TABLE IF NOT EXISTS `jss1_prelim` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`term` varchar(30) NOT NULL, 
`idnumber` varchar(30) NOT NULL, 
`subject` varchar(30) NOT NULL, 
`score` varchar(30) NOT NULL, 
`teacher` varchar(30) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

INSERT INTO `jss1_prelim` (`id`, `term`, `idnumber`, `subject`, `score`, `teacher`) 
VALUES 
(1, 'Prelim', 'SBI-JS202', 'Computer', '82', 'TID273'), 
(2, 'Prelim', 'SBI-JS645', 'Computer', '63', 'TID273'), 
(3, 'Prelim', 'SBI-JS300', 'Computer', '65', 'TID273'), 
(4, 'Prelim', 'SBI-JS202', 'Igbo', '70', 'TID015'), 
(5, 'Prelim', 'SBI-JS645', 'Igbo', '65', 'TID015'); 

我需要這個腳本的幫助,這個腳本工作正常進行排序SQL數據庫條目下位置。但我需要php代碼根據他們的得分(第一,第二,第三,第三,第五)給出位置。PHP代碼要根據自己的分數(第1,第2,第3,第3,第5)

<table border = '2'> 
<tr> 
<td>Student ID</td> 
<td>Score</td> 
<td>Position</td> 
</tr> 
<?php 

$con = mysql_connect("localhost", "root", ""); 
if(!$con) 
{ 
    echo "Could not establish connection to the database " . mysql_error(); 
} 

$mydb = mysql_select_db("sbicenugu", $con); 
if (!$mydb) 
{ 
    echo "Error selecting database " . mysql_error(); 
} 

$mystatement = mysql_query("SELECT * FROM jss1_prelim ORDER BY score DESC"); 
$dbcount = mysql_num_rows($mystatement); 
$selection = array(0 => ""); 
$nameselection = array(0 => ""); 

$i = 0; 
    while ($row = mysql_fetch_array($mystatement)) 
    { 
    $selection[$i] = $row['score']; 
    $nameselection[$i] = $row['idnumber']; 
    $i++; 
    } 
arsort($selection); 
ksort($nameselection); 

for ($x = 0; $x < $dbcount; $x++) 
{ 
echo "<tr> <td>$nameselection[$x]</td> 
<td>$selection[$x]</td> 
<td>"; $grades = array($selection[$x]); 
$occurrences = array_count_values($grades); 
$grades = array_unique($grades); 
foreach($grades as $grade) 
{ 
if($grade == end($grades))$i += $occurrences[$grade]-1; 
echo str_repeat('-'.($i + 1).'<br>',$occurrences[$grade]); 
$i+= $occurrences[$grade]; 
} 
echo"</td> 
</tr>"; 
} 
?> 
</table> 

這些腳本並沒有給我什麼我期望的學生在課堂上的位置。對於那些他們的得分很高的人來說,它也給了不同的價值觀。 我需要幫助。

回答

0

這SQL代碼會給你的排名爲列「等級」,並與部分結果效果很好,所以你總是有正確的排名甚至出現多頁的第二頁時:

SELECT (SELECT COUNT(*) + 1 
    FROM jss1_prelim ref 
    WHERE ref.score > main.score) as rank, 
    id, term, idnumber, subject, score, teacher 
FROM jss1_prelim main 
ORDER BY score DESC 

確保在score上放置索引以獲得更好的性能。

+0

我只是添加腳本...我怎麼能迴應它的位置 – sammyltk 2014-12-05 21:54:53

+0

子查詢的結果是用'as排名'別名,所以你可以通過'$ row ['rank']'來訪問它你的代碼 – 2014-12-05 21:58:16

+0

它的作品,但回聲所有學生成績作爲第四名(沒有第一或第二基於他們的成績) – sammyltk 2014-12-05 22:06:43

相關問題