FAQ |
Kalender |
|
![]() |
#1 | ||
|
|||
Flitig postare
|
har en lista som ser ut såhär:
0 10 50 100 200 500 1000 om en person har värdet 75 hamnar han på 50 nivån om en person har värdet 100 hamnar han på 100 nivån Om en person har värdet 0 hamnar han på 0 nivån Hur kan jag enklast veta vilken nivå en användare är på om den har ett visst värde. Detta kan gärna göras som en SQL fråga annars går pseudo bra |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Har WN som tidsfördriv
|
select max(level_limits) where user_points >= level_limits;
Otestad kod, men känns rätt i mitt huvud :-) |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Mycket flitig postare
|
Det ser helt rätt ut, och till skillnad från ConnyWesths förslag behöver man bara använda en kolumn i tabellen. Vad jag kan se använder ConnyWesth inte alls HighValue.
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
Logiken i nedan pseudocode funkar så att när den väl hittar en match så hoppar den vidare till slutet av funktionen.
Pseudocode: Kod:
begin function getLevel(value) if (value>=1000) level=1000 elseif (value>=500) level=500 elseif (value>=200) level=200 elseif (value>=100) level=100 elseif (value>=50) level=50 elseif (value>=10) level=10 else level=0 endif return level end function Senast redigerad av Conny Westh den 2012-10-04 klockan 20:02 |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Flitig postare
|
Citat:
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
||||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Har WN som tidsfördriv
|
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Klarade millennium-buggen
|
Här kommer lite SQL-kod som jag testat i MS SQL-server 2008 R2, har sånt sabla problem att få MySQL 5.5.28.2 att fungera.
Kod:
-- Följande är SQL för att skapa tabellen LevelDefinitions i MSSQL-server 2008 R2 USE [wntest] GO /****** Object: Table [dbo].[LevelDefinition] Script Date: 10/04/2012 20:42:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Skapa tabellen med DDL-script CREATE TABLE [dbo].[LevelDefinition]( [Level] [int] NOT NULL, [LowValue] [int] NULL, [HighValue] [int] NULL, CONSTRAINT [PK_LevelDefinition] PRIMARY KEY CLUSTERED ( [Level] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO Kod:
-- Lägg upp definitionen av alla tabellerna INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 1000,1000,999999 INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 500,500,999 INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 200,200,499 INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 100,100,199 INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 50,50,99 INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 10,10,49 INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT 0,0,9 GO Kod:
-- kolla innehållet i hela tabellen, så det ser ut att vara OK select * from LevelDefinition Kod:
-- Så här får man fram rätt LEVEL select Max(Level) from LevelDefinition where 75>=LowValue; |
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Klarade millennium-buggen
|
Här kommer lite stored procedures som kan vara till hjälp:
Kod:
CREATE PROCEDURE [dbo].[LevelInsert] @Level int, @LowValue int, @HighValue int AS BEGIN INSERT INTO [dbo].[LevelDefinition] ([Level],[LowValue],[HighValue]) SELECT @Level,@LowValue,@HighValue END GO CREATE PROCEDURE [dbo].[LevelUpdate] @Level int, @LowValue int, @HighValue int AS BEGIN UPDATE [dbo].[LevelDefinition] SET [LowValue]=@LowValue, [HighValue]=@HighValue WHERE [Level]=@Level END GO CREATE PROCEDURE [dbo].[LevelDelete] @Level int AS BEGIN DELETE [dbo].[LevelDefinition] WHERE [Level]=@Level END GO CREATE PROCEDURE [dbo].[LevelInit] AS BEGIN EXEC [dbo].[LevelInsert] 1000,1000,999999; EXEC [dbo].[LevelInsert] 500,500,999; EXEC [dbo].[LevelInsert] 200,200,499; EXEC [dbo].[LevelInsert] 100,100,199; EXEC [dbo].[LevelInsert] 50,50,99; EXEC [dbo].[LevelInsert] 10,10,49; EXEC [dbo].[LevelInsert] 0,0,9; END GO |
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Klarade millennium-buggen
|
Min modell av det hela är mer generell och öppen för utbyggnad och flexibilitet.
Bland annat kan man använda en benämning på nivåerna som är helt oberoende från värdet på poängen i tabellen. Man kan på ett enkelt sätt justera beräkningen av vilken nivå man hamnar på i en enskild SP utan att ändra en rad i programkoden. Enbart en ändring i SPn räcker. |
||
![]() |
![]() |
Svara |
|
|