php - MySQL のソートと対応するシリアル番号の取得
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 13:11:51
0
3
660

次に、そのような関数を実装する必要があります。データベース内の対応する年齢の子供の身長を並べ替え、指定された 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梦

全員に返信(3)
巴扎黑

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

いいねを押す +0
phpcn_u1582

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

いいねを押す +0
伊谢尔伦

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート