2012年7月12日

[mysql 15794] Re: カテゴリ毎の上位3件

shin1です。

>個人的にはカテゴリ別にSQLをプログラムから投げるほうが好ましい気がしますが、、、

これもカテゴリ数によってはTCP通信が発生する場合など
別な部分で遅くなりそうですね;;

>予め順位のカラムを追加するバージョンを考えてみました


from (select * from xxx2) as t2 は驚きましたw
MySQLはこんな所にもいやな縛りが出てくるんですね(泣)

「同じ値段のものはIDが小さいほうが上位」という事で少し省略できますね。

-- 順位更新
UPDATE xxx2 t
set
rank = ( -- 自分より値段が低いか同じ値段でIDが小さいものをカウント
select
count(*)
from
(select * from xxx2) as t2
where
t2.nen = t.nen
and (t2.gaku < t.gaku
or (t2.gaku = t.gaku
and t2.id < t.id) )
) + 1

今回のケースは、実務のほうでは他にも色々な抽出条件が加わっていて、
さらに結果のソート順も複雑でして、この「ランクを振っておいてから
抽出する」という考えが本当は一番スマートだったかも知れません。

ランクだけで無く他の抽出条件も加味して、一度テンポラリに抜き出して
からじっくりsortしても良かったかな。なんて。
今回はサブクエリだけで抽出する方法で強引に対応してしまいましたが・・

ありがとうございました。
次回はこのアイデアも参考にさせていただきます。


投稿者 xml-rpc : 2012年7月12日 03:38
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/111250
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。