@ -19,12 +19,16 @@ class CompetitionTeamsController < ApplicationController
shixuns = Shixun . where ( user_id : @team_user_ids , status : 2 ) . where ( 'shixuns.created_at > ?' , Time . parse ( '2018-06-01' ) )
shixuns = shixuns . joins ( 'left join shixuns forked_shixuns on forked_shixuns.fork_from = shixuns.id and forked_shixuns.status = 2' )
shixuns = shixuns . joins ( 'left join myshixuns on myshixuns.shixun_id = shixuns.id and exists(select 1 from games where games.myshixun_id = myshixuns.id and games.status = 2)' )
shixuns = shixuns . select ( 'shixuns.id, shixuns.identifier, shixuns.user_id, shixuns.myshixuns_count, shixuns.name, shixuns.fork_from, sum(forked_shixuns.myshixuns_count) forked_myshixun_count' )
@shixuns = shixuns . group ( 'shixuns.id' ) . order ( 'shixuns.myshixuns_count desc' ) . includes ( :creator )
@myshixun_count_map = Myshixun . where ( shixun_id : @shixuns . map ( & :id ) )
. where ( 'exists(select 1 from games where games.myshixun_id = myshixuns.id and games.status = 2)' )
. group ( 'shixun_id' ) . count
shixun_ids = @shixuns . map ( & :id )
@myshixun_count_map = get_valid_myshixun_count ( shixun_ids )
# forked shixun valid myshixun count
forked_shixun_map = Shixun . where ( status : 2 , fork_from : shixun_ids ) . select ( 'id, fork_from' )
forked_shixun_map = forked_shixun_map . each_with_object ( { } ) { | sx , obj | obj [ sx . id ] = sx . fork_from }
forked_myshixun_count_map = get_valid_myshixun_count ( forked_shixun_map . keys )
forked_myshixun_count_map . each { | k , v | @myshixun_count_map [ forked_shixun_map [ k ] ] += v }
# todo: 使用新版course_members
course_ids = Course . where ( 'courses.created_at > ?' , Time . parse ( '2018-06-01' ) )
@ -323,4 +327,10 @@ class CompetitionTeamsController < ApplicationController
true
end
def get_valid_myshixun_count ( ids )
Myshixun . where ( shixun_id : ids )
. where ( 'exists(select 1 from games where games.myshixun_id = myshixuns.id and games.status = 2)' )
. group ( 'shixun_id' ) . count
end
end