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
Post a Comment