繁体   English   中英

从PHP和MySql中的总和打印等级

[英]Print Rank from sum in PHP & MySql

我有我的Sql数据库表如下

 idno      Name        Subject         Score 

  1        Mahesh      English           55
  1        Mahesh      Maths             25
  1        Mahesh      Science           35
  2        Richards    English           65 
  2
  2 
  3
  3         
  3
  .................. Like ways so on till id number 12000

现在,我将为用户提供一个表格,告诉他们输入ID号并提交,然后输出应该是。

如果用户输入idno:3并提交表单,则输出应为

   IDNO        NAME         TOTAL SCORE       RANK
     1         MAHESH           95            2546 (Example)

在这里我正在使用此代码

   $id = mysql_real_escape_string($_POST['id']);
   $sum = "SELECT idno, SUM(score) AS tech
   FROM jbit 
   WHERE htno='$id'";
   $result1 = mysql_query($sum);
   echo "
   <center><table id='mytable' cellspacing='0'  border=3 align=center>
   <tr>
   <TH scope='col'>IDNO</TH>
   <TH scope='col'>NAME</TH>
   <TH scope='col'>TOTAL SCORE</TH>
   <TH scope='col'>RANK</TH>
   </tr><center>";
   while ($row = mysql_fetch_assoc($result1)){
echo "<tr>";
   echo "<td align=center>" . $row['idno']. "</td>";
   echo "<td align=center>" . $row['name']. "</td>";
   echo "<td align=center>" . $row['tech']. "</td>";
   echo "</tr>";

在这里我无法计算等级并打印等级,我该怎么做?

基于总得分,即计算并打印SUM(得分)作为技术排名标准

在您的问题上花了一些时间之后,我终于创建并测试了以下SQL查询,它产生的结果与您要求的相同,并且也很好地处理了联系。

SELECT idno, name, rank,total_score
FROM (SELECT *,  IF(@marks=(@marks:=total_score), @auto, @auto:=@auto+1) AS rank 
FROM (SELECT * FROM 
  (SELECT idno, name, SUM(score) AS total_score 
    FROM jbit, 
    (SELECT @auto:=0, @marks:=0) as init 
     GROUP BY name) sub ORDER BY total_score DESC)t) as result
WHERE idno ='1'

希望这可以帮助。

SELECT idno, SUM(score) AS tech
       FROM jbit 
       WHERE htno='$id'"
       GROUP BY idno

尝试这个:

   SET @rownum = 0; 
   Select *,  (@rownum := @rownum+1) as RANK
   FROM
   (
      SELECT * 
      FROM
      (
         SELECT IDNO, NAME, SUM(score) AS TOTASCORE      
         FROM jbit 
         GROUP BY IDNO, NAME
       ) sub
       ORDER BY TOTASCORE DESC --The rank is calculated based on this field
   ) t
   WHERE IDNO = @IDNOParam

您可以这样尝试:

链接

请检查上面的链接,希望对您有所帮助。

我尝试使用此代码...可能会帮助我从用户那里得到结果,并为用户个人资料图片上传表并加入它,而不是在我计算用户点数并对其进行排序之后。 最后我检查并添加了

set @row_num = 0;
set @calp =0;
select  if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from 
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE  '%ph%'






==========for both search =============
set @row_num = 0;
set @calp =0;

select temp.* from
(select  if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from 
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE  '%ph%') as temp
WHERE temp.username LIKE '%a%'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM