[前][次][番号順一覧][スレッド一覧]

mysql:15794

From: <shin-1@xxxxxxxxxx>
Date: Thu, 12 Jul 2012 03:38:41 +0900
Subject: [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しても良かったかな。なんて。
今回はサブクエリだけで抽出する方法で強引に対応してしまいましたが・・

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

[前][次][番号順一覧][スレッド一覧]

     15783 2012-07-11 02:56 [<shin-1@xxxxxxxxxx> ] カテゴリ毎の上位3件                     
     15784 2012-07-11 10:27 ┣[高橋政利 <takahashi@]                                       
     15785 2012-07-11 12:28 ┣[中川 貴 <takashi.nak]                                       
     15796 2012-07-12 04:10 ┃┗[<shin-1@xxxxxxxxxx> ]                                     
     15786 2012-07-11 13:49 ┗[<gotou1213@xxxxxxxxx]                                       
     15787 2012-07-11 14:17  ┣[<gotou1213@xxxxxxxxx]                                     
     15788 2012-07-11 15:00  ┃┗[中川 貴 <takashi.nak]                                   
     15790 2012-07-11 16:09  ┗[<shin-1@xxxxxxxxxx> ]                                     
     15791 2012-07-11 17:11   ┣[あきら <akirainfoml@]                                   
->   15794 2012-07-12 03:38   ┃┗[<shin-1@xxxxxxxxxx> ]                                 
     15792 2012-07-12 00:40   ┗[<gotou1213@xxxxxxxxx]                                   
     15795 2012-07-12 03:42    ┗[<shin-1@xxxxxxxxxx> ]