php – 如何为MySQL中的唯一值生成唯一编号?
发布时间:2020-12-13 16:52:46 所属栏目:PHP教程 来源:网络整理
导读:我陷入了为唯一值创建唯一数字的困境.我在 MySQL表中有25行我想在其上分配排名.假设10个用户获得相同的值:我想为它们分配相同的数字,其余的将是唯一的.我有以下MySQL查询: (SELECT std_login_id AS ID,STD_NAME,TOTAL_MARKS,(@rnk := @rnk + 1) AS RANK FR
我陷入了为唯一值创建唯一数字的困境.我在
MySQL表中有25行我想在其上分配排名.假设10个用户获得相同的值:我想为它们分配相同的数字,其余的将是唯一的.我有以下MySQL查询:
(SELECT std_login_id AS ID,STD_NAME,TOTAL_MARKS,(@rnk := @rnk + 1) AS RANK FROM (SELECT ob.std_login_id,SUM(ob.marks_obtain) AS TOTAL_MARKS,std.student_name AS STD_NAME FROM exam_marks_obt ob JOIN ac_std_preadmission STD ON ob.std_login_id = std.std_login_id JOIN adm_class AS cl ON cl.class_id = std.class_id JOIN adm_section se ON se.section_id=std.section_id WHERE cl.class_id = 1 AND se.section_id = 1 GROUP BY ob.std_login_id ORDER BY ABS(SUM(ob.marks_obtain)) DESC) ob CROSS JOIN (SELECT @rnk := 0) AS flyRank ) ; 以下是结果: ID | STD_NAME | TOTAL_MARKS | RANK 1 | name1 | 250 | 1 2 | name2 | 250 | 2 3 | name3 | 200 | 3 4 | name4 | 200 | 4 5 | name5 | 150 | 5 6 | name6 | 150 | 6 我想为250 => 1,200 => 2和150 => 3生成Rank这样的Rank.请告诉我在代码中我可以做些什么来产生这个等级? 解决方法
我创建了一个测试表来模拟聚合标记的内部选择.然后,允许按列顺序切换,我尝试简单地使用您的方法,因为您已经在查询中使用变量.
SELECT std_login_id AS ID,(@rnk := IF(@track = TOTAL_MARKS,@rnk,@rnk + 1)) AS RANK,(@track:= TOTAL_MARKS) as TOTAL_MARKS FROM ( select * from testtable ORDER BY total_marks DESC) ob CROSS JOIN (SELECT @rnk := 0,@track := 0) AS starter; 我相信这会产生你想要的东西.可能有更好的方法,但现在已经很晚了,所以我会选择它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |