php - MySQL的排序並取得對應序號
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:11:51
0
3
590

現在需要實現這麼一個功能:對資料庫中的對應年齡的兒童的身高排序,並得到指定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梦

全部回覆 (3)
巴扎黑

1,得到9527的身高為 h
2,select count(0) from tb where age = 8 and height > h;
3,那麼9527的身高排名就是並列 count + 1,

    phpcn_u1582

    不用那麼複雜,身高排名,如果從高到低排名,這麼計算:
    a=身高字段
    select count(*) from children where
    age=8 and
    a>=(select a from children where id=9527 );
    count(*)就是排名

      伊谢尔伦

      mysql不支援rank方面的函數...在oracle, postgres等等比較強大的資料庫裡面可以很方便用row_number()實作
      假如資料庫的column是id, age, height
      select id, age, height,
      row_number() over (partition by age order by height desc) as rn
      from tb

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!