php - MySQL的排序并取得对应序号
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:11:51
0
3
622

现在需要实现这么一个功能:对数据库中的对应年龄的儿童的身高排序,并得到指定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;

我的问题是:
1.语句中的(@rowno:=@rowno+1)、(select (@rowno:=0)) 、b、C 是什么意思,查了一下大致知道是自定义命名赋值之类的,但是不清楚准确该怎么理解,还有出现的 bc是什么意思?

2.我要在该语句基础上加一个条件,就是八岁儿童的身高排名,也就是要在第一条排序语句中加入where age equals 8 这句话应该加在哪里? 我试过加在 from test 后面和其他几个地方都报错了,不知道该怎么加。

困扰了一天了,希望数据库的大虾们帮助解答一下这两个问题,万分感谢!!!

过去多啦不再A梦
过去多啦不再A梦

répondre à tous(3)
巴扎黑

1, obtenez la taille de 9527 comme h
2, sélectionnez count(0) à partir de tb où âge = 8 et taille > h;
3, puis le classement de taille de 9527 est égal à count + 1,

phpcn_u1582

Cela n'a pas besoin d'être si compliqué, le classement par taille, si vous classez de haut en bas, calculez-le comme ceci :
a=champ de taille
sélectionnez le nombre (*) d'enfants où
age=8 et
a>= (sélectionnez un parmi les enfants où id=9527 );
count(*) est le classement

伊谢尔伦

mysql ne prend pas en charge les fonctions de classement... Dans des bases de données relativement puissantes telles que Oracle, Postgres, etc., cela peut être facilement implémenté en utilisant row_number()
Si la colonne de la base de données est id, age, height
select id, age , hauteur,
row_number() over (partition par ordre d'âge par hauteur desc) comme rn
from tb

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!