webForumDet fria alternativet

Kombinera + Summera tävlingsvärden

Databaser & SQLur Databashanterare & SQL

3 svar · 402 visningar · startad av backer

Medlem sedan feb. 200924 inlägg
Frågan#1

Fick grym hjälp med en bra tävlings sql (http://www.webforum.nu/showthread.php?t=173181).

Kollade vidare på den och är ute efter samma sak fast en ihopslagning av 2 eller flera tabellers värden.

Detta är lite vad jag är ute efter

GAME 1
rank	player	points
1		4		400
2		3		300
3		2		200
4		1		100

GAME 2
rank	player	points
1		4		400
2		2		300
3		1		200
4		3		100

GAMES 1,2 COMBINE
rank	player	points
1		4		800
2		2		500
3		3		400
4		1		300

poäng finns i samma MYSQL tabell men i slutet vill jag få ut UNIKA användares summerade top poäng från båda listorna. Var startar man, känner mig lite vilsen här och har försökt hitta något exempel.

Så alltså, unik player 1 score A top päng + unik player 1 score B top poäng = summa
sedan sorta summa mot alla andra unika spelare.

Tanken här är att kunna byta vilka score tabeller så t.ex. ge mig scores från 2,4,5,7.

någon som hänger med, kanske förklarar lite flummigt :OO

Medlem sedan dec. 20025 483 inlägg
#2

Så för varje match har du alltså en tabell? Finns alla användare med i alla matchtabeller? I sådana fall:

select u.playerid,
       ( select top 1
                points
           from tblA
          where playerid = u.playerid
         order
             by points desc ) +
       ( select top 1
                points
           from tblB
          where playerid = u.playerid
         order
             by points desc )
  from users u
order
    by 2 desc
Medlem sedan feb. 200924 inlägg
#3

njä, har en tabell för alla highscores, det som separerar dem är column id scoreListId.

Försökte mig på något från din mall där. Min tabel totalScore blir NULL, några förslag, tror jag får fel på den vid ORDER BY också.

SELECT h1.playerId,h1.scoreName, 
	(SELECT max(h2.scorePoints) 
		FROM tbl_highscores h2 
		WHERE h2.scoreListId = 2 
		AND h2.playerId = h1.playerId
		ORDER BY h2.scorePoints desc) 
	+
	(SELECT max(h3.scorePoints) 
		FROM tbl_highscores h3 
		WHERE h3.scoreListId = 3 
		AND h3.playerId = h1.playerId
		ORDER BY h3.scorePoints desc) 
	AS totalScore
	FROM tbl_highscores h1 
	GROUP BY h1.playerId
	ORDER BY totalScore desc;
Medlem sedan feb. 200924 inlägg
#4

Ah, vänta nu, det verkar ju fungera, måste ju bara fråga efter scoreListId som existerar.

SELECT h1.playerId,h1.scoreName, 
	(SELECT max(h2.scorePoints) 
		FROM tbl_highscores h2 
		WHERE h2.scoreListId = 0 
		AND h2.playerId = h1.playerId
		ORDER BY h2.scorePoints desc) 
	+
	(SELECT max(h3.scorePoints) 
		FROM tbl_highscores h3 
		WHERE h3.scoreListId = 1 
		AND h3.playerId = h1.playerId
		ORDER BY h3.scorePoints desc) 
	AS totalScore
	FROM tbl_highscores h1 
	GROUP BY h1.playerId
	ORDER BY totalScore desc;
131 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)