60 lines
2.2 KiB
MySQL
60 lines
2.2 KiB
MySQL
|
-----------------------
|
||
|
-- SEARCH ACHIEVEMENTS --
|
||
|
-----------------------
|
||
|
|
||
|
CREATE PROCEDURE SearchAchievements(
|
||
|
@searchTerm VARCHAR(32),
|
||
|
@userId INT,
|
||
|
@completed BIT,
|
||
|
@minCompletion FLOAT,
|
||
|
@maxCompletion FLOAT,
|
||
|
@minDifficulty FLOAT,
|
||
|
@maxDifficulty FLOAT,
|
||
|
@minQuality FLOAT,
|
||
|
@maxQuality FLOAT
|
||
|
)
|
||
|
AS
|
||
|
IF @userId IS NULL AND @completed = 1
|
||
|
BEGIN
|
||
|
PRINT 'Cannot search for completed achievements with no user specified'
|
||
|
RETURN 1
|
||
|
END
|
||
|
|
||
|
IF @searchTerm IS NULL OR @searchTerm = ''
|
||
|
SET @searchTerm = '%'
|
||
|
ELSE
|
||
|
SET @searchTerm = '%' + @searchTerm + '%'
|
||
|
PRINT @searchTerm
|
||
|
|
||
|
IF NOT @userId IS NULL
|
||
|
SELECT TOP 100 Game.[Name] AS Game, Achievement.[Name], Completion, Difficulty, Quality
|
||
|
FROM Achievement
|
||
|
JOIN MaxProgress ON AchievementID = Achievement.ID AND UserID = @userId
|
||
|
JOIN Game ON Game.ID = GameID
|
||
|
JOIN AchievementCompletion AC ON AC.ID = Achievement.ID
|
||
|
JOIN AchievementRatings AR ON AR.ID = Achievement.ID
|
||
|
WHERE (Game.[Name] LIKE @searchTerm OR Achievement.[Name] LIKE @searchTerm)
|
||
|
AND (@completed <> 1 OR Progress = Stages )
|
||
|
AND (@minCompletion IS NULL OR @minCompletion <= Completion)
|
||
|
AND (@maxCompletion IS NULL OR @maxCompletion >= Completion)
|
||
|
AND (@minDifficulty IS NULL OR @minDifficulty <= Difficulty)
|
||
|
AND (@maxDifficulty IS NULL OR @maxDifficulty >= Difficulty)
|
||
|
AND (@minQuality IS NULL OR @minQuality <= Quality )
|
||
|
AND (@maxQuality IS NULL OR @maxQuality >= Quality )
|
||
|
ELSE
|
||
|
SELECT TOP 100 Achievement.ID, Game.[Name] AS Game, Achievement.[Name], Completion, Quality, Difficulty
|
||
|
FROM Achievement
|
||
|
JOIN Game ON Game.ID = GameID
|
||
|
JOIN AchievementCompletion AC ON AC.ID = Achievement.ID
|
||
|
JOIN AchievementRatings AR ON AR.ID = Achievement.ID
|
||
|
WHERE (Game.[Name] LIKE @searchTerm OR Achievement.[Name] LIKE @searchTerm)
|
||
|
AND (@minCompletion IS NULL OR @minCompletion <= Completion)
|
||
|
AND (@maxCompletion IS NULL OR @maxCompletion >= Completion)
|
||
|
AND (@minDifficulty IS NULL OR @minDifficulty <= Difficulty)
|
||
|
AND (@maxDifficulty IS NULL OR @maxDifficulty >= Difficulty)
|
||
|
AND (@minQuality IS NULL OR @minQuality <= Quality )
|
||
|
AND (@maxQuality IS NULL OR @maxQuality >= Quality )
|
||
|
RETURN 0
|
||
|
GO
|
||
|
|
||
|
EXEC SearchAchievements '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|