mysql存储过程获取记录排名(一般用于投票系统)
原理
计算当前学校的票数,暂且记作a
计算票数大于自己的学校数目,暂且记作b,如果b=0,则自己票数排名第一
计算票数小于自己的学校数目,暂且记作c,如果c=0,则自己票数排名最后
如果b != 0 && c != 0,那么b+c就是自己的票数排名 create procedure `get_rank`(in `school` int)beginset @votes = (select count(tcl_vote.vote_id) as counts from tcl_works left join tcl_vote on tcl_vote.works_id = tcl_works.works_id where tcl_works.school_id=school);set @gt = (selectcount(*)from(selecttcl_works.school_id,count(tcl_vote.vote_id) as votesfromtcl_worksleft join tcl_vote on tcl_vote.works_id = tcl_works.works_idgroup bytcl_works.school_idhavingvotes > @votesorder byvotes desc)as xxx);if @gt = 0thenset @rank = 1;select @rank as rank;elseset @lt = (selectcount(*)from(selecttcl_works.school_id,count(tcl_vote.vote_id) as votesfromtcl_worksleft join tcl_vote on tcl_vote.works_id = tcl_works.works_idgroup bytcl_works.school_idhavingvotes < @votesorder byvotes desc)as xxx);if @lt = 0thenset @rank =(select count(*) from tcl_school limit 1);select @rank as rank;elseset @rank = (@gt+@lt);select @rank as rank;end if;end if;end;call get_rank(1)
