数据库中某项其中一个值在该项排第几,php+mysql
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库中某项其中一个值在该项排第几,php+mysql相关的知识,希望对你有一定的参考价值。
想做一个打卡次数排名的程序,现在有一个表,内容如下:
xuehao cishu
100 1
103 21
112 6
126 10
……
然后需要得出某一个xuehao下的值对应的cishu,在整个表里cishu排第几
比如说 我想知道xuehao为112的人他打卡次数是6次,那么按照次数排序,是排第几
环境是php+mysql
求php实现代码,谢谢,可以再加分
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就是排序追问
恩,类似第一个的方法我也试过,当时看的这个http://zhidao.baidu.com/question/516888937.html问题的解决方案,也得出了排序的结果
但是现在想要知道 某一个学号的打卡次数排第几应该怎么求啊?
我之前问了一个问题http://zhidao.baidu.com/question/569980187
如果能解决 两个题目的分一起给你
某一个学号的打卡次数排第几应该怎么求啊 ,你新学php?还是新学sql?上面说的很清楚了啊。
第一种方法,把所有的人打卡次数按逆序排列,组成一个结果集,然后用想要找的那个学号作为条件,从这个结果集里查找。就找到这个学号的打卡次数排序了啊。
第二种方法,更好理解,把所有的打卡次数排序全取出来,组成一个数组集合,然后从头遍历,每遍历一个,排序会+1,知道找到这个学号为止,就知道这个学号的排序了啊。
我是新手
我之前问了一个问题http://zhidao.baidu.com/question/569980187
现在得到的数据是三维数组吧,那么怎么根据学号去获得排序的值呢?
难道用foreach循环吗?那几万条数据不是要很久
……用第一种方法,得到的是一个只有一个元素的数组!Array([0]>5)一次性获得某个学号打卡次数排第几了!
用第二种方法,得到的是类似这样的数据Array ( [0] => Array ( [xuehao] => 20110407101 [cishu] => 87 ) [1] => Array ( [xuehao] => 20120402425 [cishu] => 86 ) ,然后遍历这个数组,看要找的学号位于数组的第几位,即为名次
恩,出来了,谢谢啊
现在用第一个方法得到的数据是
Array ( [0] => Array ( [orderNo] => 152 ) )
能弄成一位数组吗?
对了你可以在http://zhidao.baidu.com/question/569980187这个问题回答,我把分一起给你
Array ( [0] => Array ( [orderNo] => 152 ) )
能弄成一位数组吗?
这种格式是查询结果集的固定格式,没个结果集都是一个包含了N个数组的数组。
第一种方式因为只会查到一条结果,所以它才是一个只包含了一个数组的数组。res[0][‘orderNo’]就拿出来了。应该是这样。
刚才那个一位数组的是不是不可以完成?话说有没有php函数可以完成的?
还有怎么再以第二个条件来排序呢?比如说还有一个项是time,先按照次数来排序然后再按照time时间先后来
还有如果,直接去掉重复的来排名,比如说现在打卡数据是“5、5、4、4、3、3”那么现在打卡4次的就是排名第二,这个可以实现吗?
谢谢
nyoj139--我排第几个 (康拓展开)
我排第几个
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; - 输出
- 输出一个整数m,占一行,m表示排列是第几位;
- 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
- 样例输出
-
1 302715242 260726926
- 来源
- [苗栋栋]原创
- 上传者
- 苗栋栋
- 懵B;
-
#include <cstdio> #include <cstring> int a[15]; void deal() { a[1]=1; for(int i=2; i<=12; i++) a[i]=a[i-1]*i; } int main() { deal(); int t;scanf("%d", &t); while(t--) { char str[15]; scanf("%s", str); int len=strlen(str); int rec =0; for(int i=0; i<len; i++) { int count=0; for(int j=i+1; j<len; j++) if(str[j]<str[i]) count++; rec+= count*a[len-1-i]; } printf("%d\\n", rec+1); } return 0; }
#include <cstdio> #include <cstring> int jc[13]={0, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600}; int main() { char normal[13]="abcdefghijkl"; int t; scanf("%d", &t); while(t--) { int v[13]; memset(v, 0, sizeof(v)); char str[13]; scanf("%s", str); int len=strlen(str); int sum=0; for(int i=0; i<len; i++) { v[str[i]-‘a‘]=1; if(str[i]-normal[i]==0) { continue; } else { int d=0; int p=str[i]-‘a‘; for(int k=p-1; k>=0; k--) if(v[k]==0) d++; int j=i+1; int t=12-j; //printf("%d\\n", j+t); sum=sum+d*jc[t]; } } printf("%d\\n", sum+1); } return 0; }
以上是关于数据库中某项其中一个值在该项排第几,php+mysql的主要内容,如果未能解决你的问题,请参考以下文章