Kom ihåg mig?
Home Menu

Menu


hitta nivå bland lista

 
 
Ämnesverktyg Visningsalternativ
Oläst 2012-10-04, 19:11 #1
frecka frecka är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
frecka frecka är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Standard hitta nivå bland lista

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
frecka är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-04, 19:41 #2
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
select max(level_limits) where user_points >= level_limits;

Otestad kod, men känns rätt i mitt huvud :-)
nosnaj är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-05, 07:39 #3
foks foks är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2003
Inlägg: 727
foks foks är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2003
Inlägg: 727
Citat:
Ursprungligen postat av nosnaj Visa inlägg
select max(level_limits) where user_points >= level_limits;

Otestad kod, men känns rätt i mitt huvud :-)
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.
foks är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-04, 20:00 #4
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-04, 20:20 #5
frecka frecka är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
frecka frecka är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2011
Inlägg: 410
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
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
Det går inte att göra på något smidigare sätt om det finns runt 100 olika nivåer?
frecka är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-04, 20:23 #6
dAEks avatar
dAEk dAEk är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2006
Inlägg: 678
dAEk dAEk är inte uppkopplad
Mycket flitig postare
dAEks avatar
 
Reg.datum: Dec 2006
Inlägg: 678
Citat:
Ursprungligen postat av frecka Visa inlägg
Det går inte att göra på något smidigare sätt om det finns runt 100 olika nivåer?
nosnajs kod borde funka om du bara rättar syntaxen.
dAEk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-04, 20:43 #7
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
Citat:
Ursprungligen postat av dAEk Visa inlägg
nosnajs kod borde funka om du bara rättar syntaxen.
Glömde visst tabellen såg jag nu, men något liknande borde funka bättre.

select max(level_limits) from level_limits_table where user_points >= level_limits;
nosnaj är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-04, 20:57 #8
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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;
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-05, 01:36 #9
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-10-05, 08:24 #10
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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.
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 00:42.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017