How to get the user details, user current level, next level, Rank in sql server

 ALTER PROCEDURE [dbo].[SP_GETUSERPROFILE]

@UserId int

AS

BEGIN

--checks whether user reported any tweet or not

IF EXISTS(SELECT * FROM OnGoingReports WHERE UserId=@UserId)

BEGIN

--if user already reported tweets then gets the user details and rank

select UserId,UserName,Name,UserReportedTweetCount,Rank 

    from 

(select UserId,UserName,Name,UserReportedTweetCount,ROW_NUMBER() OVER(ORDER BY UserReportedTweetCount desc) AS Rank 

from

     (select ogr.UserId,uc.UserName,Name,Count(*) UserReportedTweetCount from UserCredentials uc

      inner join OnGoingReports ogr

      on

      ogr.UserId=uc.UserId 

      GROUP BY ogr.UserId,uc.Name,uc.UserName) as TopList

) as UserRank 

    where UserId=@UserId

END

ELSE

BEGIN

--if user not reported any tweets then it get the default value as 0 and rank based on tweets reported

select UserId,UserName,Name,UserReportedTweetCount,Rank 

    from(select  UserId,UserName,Name,UserReportedTweetCount,ROW_NUMBER() OVER(ORDER BY UserReportedTweetCount desc) AS Rank 

from

     (select ogr.UserId,uc.UserName,Name,Count(*) UserReportedTweetCount from UserCredentials uc

  inner join OnGoingReports ogr

      on

      ogr.UserId=uc.UserId 

      GROUP BY ogr.UserId,uc.Name,uc.UserName

  union

  select uc.UserId,uc.UserName,Name,0 UserReportedTweetCount from UserCredentials uc 

  where UserId=@UserId 

  GROUP BY uc.UserId,uc.Name,uc.UserName 

  ) TopList)as UserRank  where UserId=@UserId

END


--checks user level

If exists(select * from UserLevel where UserId=@UserId)

begin

--if user level is already exists

select UserId,LevelName,BadgeName,NoofTweets from userlevel ul

inner join LevelBadge lb

on

lb.Id=ul.LevelBadgeId

inner join Badges b

on

lb.badgeid=b.badgeid

inner join Levels lvls

on

lvls.levelid=lb.levelid

where UserId=49

end

else

begin

   --if user level not defined or user is newly registered selects default level

select 'Level 1' as LevelName,'None' BadgeName ,0 NoofTweets

END


select description,profileimage,gender,dateofbirth,longitude,latitude,AuthToken,AuthTokenSecret from UserCredentials where UserId=@UserId


SELECT Top 1 LevelName as NextLevel,BadgeName as NextBadge,NoofTweets as NextLevelTarget FROM(

        SELECT

            ROW_NUMBER () OVER (ORDER BY  NoofTweets asc) AS RowNum,

            *

        FROM

            LevelBadge

    ) sub

inner join Levels lvls

on

lvls.LevelId=sub.LevelId

inner join Badges bdgs

on

bdgs.BadgeId=sub.BadgeId

WHERE

    NoofTweets>(SELECT Count(*) FROM OnGoingReports WHERE UserId=@UserId) 

END

Comments

Popular posts from this blog

How to update the user level when ever user report any tweet in sql

Implement virtualisation in kendo drop down list using jquery ajax in mvc, aspx page