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-код, чтобы дать позицию в соответствии с их оценками (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>
Эти сценарии не давали мне то, что я ожидал от позиции ученика в классе. также он дает разную позицию по значению для тех, кто их оценивает. Мне нужна помощь для этого.
Этот код SQL предоставит вам ранг в качестве столбца "rank" и хорошо работает с частичными результатами, поэтому вы всегда имеете нужный ранг даже при показе второй страницы нескольких страниц:
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
для лучшей производительности.
as rank
, поэтому вы можете получить к нему доступ с помощью$row['rank']
в своем коде