php - 谁能帮我看看 php 和 mysql 的排名吗?

标签 php mysql

我有如下所示的 mysql 表:

CREATE TABLE IF NOT EXISTS `cxexam` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`regd` int(11) NOT NULL,
`Name_of_Student` varchar(100) COLLATE latin1_general_ci NOT NULL,
`Class` varchar(50) COLLATE latin1_general_ci NOT NULL,
`Roll_no` int(11) NOT NULL,
`Section` varchar(50) COLLATE latin1_general_ci NOT NULL,
`Name_of_exam` varchar(100) COLLATE latin1_general_ci NOT NULL,
`Test_date` date NOT NULL,
`Subject` varchar(50) COLLATE latin1_general_ci NOT NULL,
`Full_mark` int(11) NOT NULL,
`Mark_score` int(11) NOT NULL,
`Year` year(4) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=7 ;

--

--转储表cxexam的数据

INSERT INTO `cxexam` (`id`, `regd`, `Name_of_Student`, `Class`, `Roll_no`, `Section`, `Name_of_exam`, `Test_date`, `Subject`, `Full_mark`, `Mark_score`, `Year`) VALUES

(6, 20, 'Ramdina', 'X', 9, 'A', 'Second Term Unit Test', '2013-07-19', 'English', 20, 18, 2013),
(3, 2, 'Zonundanga', 'X', 5, 'A', 'Second Term Unit Test', '2013-07-19', 'English',   20, 12, 2013),
(4, 40, 'Lalnunkimi', 'X', 10, 'A', 'Second Term Unit Test', '2013-07-19', 'English', 20, 18, 2013);

mysql 查询将产生:

regd   totalscore    rank
20   18   1
2   18   1
40  12   2

我想输出 regd='2' 的排名使用 PHP。我正在使用以下 php 代码和 mysql 代码,但我需要刷新页面才能使代码正常工作。该查询在 phpmyadmin 中工作正常,但大多数时候我只得到 1即使我更改 regd 仍为排名.

mysql_select_db($database_dbconnect, $dbconnect);
$query_myrank = "SELECT Distinct regd, Test_date, Year, Name_of_Student, TOTALSCORE,  Rank FROM 
(SELECT *, IF(@marks = (@marks := TOTALSCORE), @auto, @auto := @auto + 1) AS
Rank FROM (SELECT Name_of_Student, regd, Test_date, Year, SUM(Mark_score) AS TOTALSCORE 
FROM cxexam, (SELECT @auto := 0, @marks := 0) AS init GROUP BY regd, Year ORDER BY TOTALSCORE DESC) t) AS result HAVING regd='2' and Year='2013' and Test_date between '2013-07-01' and '2013-07-30'";
$myrank = mysql_query($query_myrank, $dbconnect) or die(mysql_error());
$row_myrank = mysql_fetch_assoc($myrank);
$Rank= $row_myrank['Rank'];

我使用 <?php echo $row_myrank['Rank'];?> 来回应它如果有人能给我一个使用 php 的替代解决方案,我会非常高兴,因为我正在尝试在我的学校成绩表管理系统中应用这个排名。

这是我的新代码:

<?php 
mysql_select_db($database_dbconnect, $dbconnect);
$query_myrank = "SELECT Distinct regd, Test_date, Year, Name_of_Student, TOTALSCORE, Rank 
FROM (SELECT *, IF(@marks = (@marks := TOTALSCORE), @auto, @auto := @auto + 1) AS Rank 
FROM (SELECT Name_of_Student, regd, Test_date, Year, SUM(Mark_score) AS TOTALSCORE 
FROM cxexam, (SELECT @auto := 0, @marks := 0) AS init GROUP BY regd, Year ORDER BY TOTALSCORE DESC) t) AS result HAVING Year='$yr' and Test_date between '$fdate' and '$tdate'";
$myrank = mysql_query($query_myrank, $dbconnect) or die(mysql_error());

$i = 0;
$j = 1;
$data = array();
while($row_myrank = mysql_fetch_assoc($myrank))
{
$data[$i] = $row_myrank;
if(isset($data[$i - 1]) && $data[$i - 1]['TOTALSCORE'] == $data[$i]['TOTALSCORE'])
{
   $data[$i]['Rank'] = $j;
}else{
   $data[$i]['Rank'] = ++$j;
}
   $i++;
}
foreach($data as $key => $value)
{
if($value['regd'] == $regd)
{
echo $value['Rank'];
}
}
?>

最佳答案

当你执行循环时,添加一个像这样的自动增量。

    $i = 0;
    $j = 0;

$data = array();

    while($row_myrank = mysql_fetch_assoc($myrank))
    {
      $data[$i] = $row_myrank;
      if(isset($data[$i - 1]) && $data[$i - 1]['Mark_Score'] == $data[$i]['Mark_Score'])
      {
       $data[$i]['rank'] = $j;
      }else{
       $data[$i]['rank'] = ++$j;
      }
      $i++;
    }

如果不说“不要使用 mysql_* 函数,而是使用 PDO”,这将是一个糟糕的答案。请看看这个链接。 http://www.php.net/manual/fr/class.pdo.php

编辑:如何输出数据

foreach($data as $key => $value)
{
 if($value['regd'] == 2)
 {
   echo $value['field'];
 }
}

只需更改查询中的字段即可。

关于php - 谁能帮我看看 php 和 mysql 的排名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17742640/

相关文章:

php - 将生成的字符串用于 MySQL 中带有变量的数组

javascript - 如何将文件从 JavaScript 传递到 PHP?

javascript - Jquery Ajax : Data is undefined when accessing the returned data of json

mysql - SQL CONTAINS 在全文索引列上没有返回结果?

php - 使用 ON DUPLICATE KEY 子句时更新不起作用

mysql - Toad for MySQL 访问被拒绝但 Workbench 连接正常

php - codeigniter 中 undefined variable 查询

php - 用于遍历日期的 MySQL SELECT

php - 如何只选择数组中的前几项?

php - Javascript 相当于 PHP 的 md5() ,它也适用于多字节字符串?