2011-07-12 4 views
0

内ソートテーブル内の行の位置を取得し[OK]を、私は問題を抱えていますこの問題を記述するためにどのように思いますが、基本的に私はこのようになりますビューを持っている:は、MySQL:ビュー

CREATE VIEW `dbname`.`v_viewname` AS 
select 
idTable, 
round(val1*(probability*.01),2) as probest, 
from table 

そして、何Iそれが降順でprobestによってソートされるときに、行の位置である別のフィールドを作成する(「ランク」と呼ぶ)。最初に私はこれを行い、次のようになり派生テーブル、にそれを回すテーブルを生成しますストアドプロシージャを作成:

set @rownum := 0; 

select * from (

select @rownum := @rownum+1 AS rank, idTable 

from table order by (val1*probability) desc) 

as derived_table; 

ので質問です、私は私のテーブルで、この派生テーブルに参加するだろうか私は私の見解から読みましたか?ルーチンや、私が使用する何かで表した。

table join inner derived_table on table.idTable = derived_table.idTable; 

が、これは、ビューを介して行われる必要があるので、私も私が参加するための派生テーブルを取得する方法を知りません。また、もしこの方法がうまくいかない、あるいは非効率であるなら、代替方法は何でしょうか?

答えて

1
select tbl.*, @rownum := @rownum+1 AS rank 
from (select 
     idTable, 
     round(val1*(probability*.01),2) as probest, 
     from table 
     order by probest desc) tbl 
     ,(select @rownum := 0) init_vars 
関連する問題