検索

ホームページ  >  に質問  >  本文

php - MySQL のソートと対応するシリアル番号の取得

次に、そのような関数を実装する必要があります。データベース内の対応する年齢の子供の身長を並べ替え、指定された ID を持つ子供の身長ランキングを取得します。たとえば、8 歳児全員の身長のうち、ID 9527 の 8 歳児の身長ランキングをクエリしたいとします。データベースのことはあまり詳しくないので、普段は追加、削除、変更、削除ばかりしているので、この機能の実装方法がわかりません。

オンラインで情報をクエリし、まずそれを並べ替えて、行のシリアル番号を生成し、次に子 ID に対応するシリアル番号を返しました。

select id,height,(@rowno:=@rowno+1) as rowno from test,(select (@rowno:=0)) b
高さの説明で並べ替えます。
これに基づいて、場所をクエリします。

select rowno from (select id,height,(@rowno:=@rowno+1) as rowno from test,
(select (@rowno:=0)) b 高さの説明で並べ替えます) c where id = 9527;

私の質問は次のとおりです:
1. ステートメント内の (@rowno:=@rowno+1)、(select (@rowno:=0))、b、および C とは何ですか? ? 調べてみると、カスタムの名前付き割り当てのようなものであることがわかりましたが、その bc は何を意味するのかよくわかりません。意味があるように見えますか?

2. このステートメントに 8 歳児の身長ランキングという条件を追加したいと思います。つまり、最初の並べ替えステートメントに where age が 8 に等しいという条件を追加する必要があります。追加した? テスト後や他のいくつかの場所に追加しようとしましたが、追加方法がわかりません。

私は 1 日悩んでいました。データベース エビがこれら 2 つの質問の解決に役立つことを願っています。ありがとうございました。 ! !

过去多啦不再A梦过去多啦不再A梦2758日前664

全員に返信(3)返信します

  • 巴扎黑

    巴扎黑2017-05-16 13:13:51

    1、9527 の身長を h
    2 として取得し、年齢 = 8、身長 > h;
    3 の tb から count(0) を選択すると、9527 の身長ランキングは count + 1 になります。

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 13:13:51

    身長ランキングはそれほど複雑である必要はありません。高いものから低いものまでランク付けする場合は、次のように計算します:
    a=身長フィールド
    select count(*) from Children where
    age=8 and
    a>= (id=9527 の子から選択);
    count(*) はランキングです

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:13:51

    mysqlはランク関数をサポートしていません...oracle、postgresなどの比較的強力なデータベースでは、row_number()を使用して簡単に実装できます
    データベースの列がid、age、heightの場合
    id、ageを選択します、身長、
    row_number() over (身長の説明による年齢順でパーティション化) as rn
    from tb

    返事
    0
  • キャンセル返事