2017-09-20 61 views
0

我是新來的,非常難倒mysql的問題。按排名順序設置字段,但在另一個字段的組中

我的表具有的Fileds: 用戶名VARCHAR,狀態VARCHAR,INT分,排名INT

我正在嘗試設置基於用戶的分數等級字段,而是由獨立的狀態。

我發現我可以爲它們設置的行列,如果我忽略狀態:

SET @pos:= 0;更新配置文件秩=(SELECT @pos:= @pos + 1)ORDER BY現金DESC

,我可以將它設置爲這樣一個狀態:

「SET @pos: = 0;更新配置文件秩=(SELECT @pos:= @pos + 1) WHERE homeState = '亞利桑那' ORDER BY現金DESC」

是否有可能通過國家它們分組,並設置他們的行列通過國家在一個單一的查詢,而不是50個人?

謝謝!

回答

0

您可以在select爲做到這一點:

select p.*, 
     (@rn := if(@s = state, @rn + 1, 
        if(@s := state, 1, 1) 
       ) 
     ) as rn 
from profiles p cross join 
    (select @s := '', @rn := 0) params 
order by state, score desc; 

爲了把這個更新,您可以使用join

update profiles p join 
     (select p.*, 
       (@rn := if(@s = state, @rn + 1, 
          if(@s := state, 1, 1) 
         ) 
       ) as rn 
     from profiles p cross join 
      (select @s := '', @rn := 0) params 
     order by state, score desc 
     ) pp 
     on p.username = pp.username 
    set p.rank = pp.rn; 
+0

嘿,我真的很感激的幫助!但是,這仍然給我一個艱難的時間。提供的更新查詢似乎在分配等級時忽略分數。鑑於表格中的條目:> bilbo,arizona,5,0 –

+0

鑑於表格條目:bilbo,arizona,5,0 | fam,阿拉斯加,1,0 |挖,阿拉斯加,0,0 | frodo,亞利桑那州,2,0 | zidon,亞利桑那州,3,0。我預計排名是1,1,2,3,2,但我得到1,1,2,1,2。 –

+0

@ZacharyNelson。 。 。 「選擇」工作嗎? –

相關問題