PHP+mysql对记录进行排序教程Php

印迹发布于:2019-3-20 1191

例一:

假设现在有一个member表记录了用户的身高,

现在对用户身高进行排名,并获取名次

SELECT t.height, @rownum := @rownum + 1 AS rownum
FROM (SELECT @rownum := 0) r, (SELECT * FROM member ORDER BY height DESC) AS t;

上面这段sql的意思其实就是按身高排序,然后再新加一个字段rownum用作排名,然后rownum每一行都会自加1 这样就得到结果了

SELECT @rownum := 0:表示对rownum赋初始值0

@rownum := @rownum + 1:表示对rownum加1,语句中会从1开始,每一行往下都自动加1

例二:

现在需要实现这么一个功能:对数据库中的对应年龄的儿童的身高排序,并得到指定ID儿童的身高排名。就是比如要查询ID为9527的这名8岁儿童的身高在所有8岁儿童身高中的排名。数据库学得不深,一般就进行增减改删,所以不知道怎么实现这个功能。

网上查询了一些资料,就是先进行排序,生成行序号,然后返回对应儿童ID的序号,有个相似语句如下

select id,height,(@rowno:=@rowno+1) as rowno from test,(select (@rowno:=0)) b 
order by height desc;

在此基础上再查询位置:

select rowno from (select id,height,(@rowno:=@rowno+1) as rowno from test,
(select (@rowno:=0)) b order by height desc) c where id = 9527;


http://www.virplus.com/thread-215.htm

转载请注明:2019-3-20 于 VirPlus 发表

推荐阅读
最新回复 (1)
  • 守望者2019-3-20
    2

    不用那么复杂,身高排名,如果从高到低排名,这么计算:

    a=身高字段

    select count(*) from children where 
    age=8 and 
    a>=(select a from children where id=9527);

    count(*)就是排名


( 登录 ) 后,可以发表评论!

返回