重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个如果想要性能的话,就用下面的sql语句实现:
专注于为中小企业提供网站制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业都兰免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
select orderNo from (select (@rowNum:=@rowNum+1) orderNo , xuehao,cishu from record,(Select (@rowNum :=0) ) b
order by cishu desc)t where t.xuehao=112
然后php获得这条结果数组,取第一个元素即是排序
如果对这个sql语句有疑问,不明白,可以使用一个比较耗费性能的方法:
select xuehao,cishu from record order by cishu desc
执行这条语句,获得一个数组$res
遍历前设置一个记录排序的标识 $seq=1;
for(...){
$xuehao=$res['xuehao'];//把第seq 个位置的学号拿出来,跟想要的学号比
if($xuehao==112){
break;
}
$seq++;
}
//如果 这个排序标识比结果集数组大小还大,说明没这个学号的记录,否则,就是这个学号打卡次数的排序。
$seq就是排序
mysql中没有类似Oracle中rownum序号的功能,所以查询数据的行序号需要自己实现。
假设问题中数据表的名字为goods,则所需sql语句如下:
SELECT @rownum := @rownum + 1 AS rownum,goods.* FROM ( SELECT @rownum := 0 ) r,goods ORDER BY rownum ASC
上述语句可以获取每条数据的行号并升序排列。
先根据票数倒序查询票数表,sql语句大概是
"SELECT 学生id,票数 FROM 票数表 ORDER BY 票数 DESC";假设得到的结果集赋值为 $res,
再用PHP遍历,
$student = array();
foreach ($res as $key = $value) {
$student[$value['学生id']] = $key +1;
}
最后就可以得到student排名数组,键是学生的id,值就是学生的排名。
没大明白什么意思,我理解的是对数据表中的数据进行排序吗,有一个字段记录数据的序号。
两种办法:
第一、修改一个数据的序号时,统一设置序号值(+1或-1根据调整的具体序号来定)推荐使用replace
第二。是我常用的方法,在数据表中加一时间字段,来记录调整序号时的时间。调整序号时,只改变被调整的数据的序号。然后记录时间。读取内容时根据序号,时间排序。order by 序号,date desc