webForumDet fria alternativet

Dubbla resultat

1 svar · 183 visningar · startad av Obbelix

ObbelixMedlem sedan okt. 2002257 inlägg
#1

Hej.

Endera är det måndags-tröttheten som jävlas eller så är det fel i denna sql.
Det sjuka är att den har fungerat som önskat, men nu får jag dubbla resultat på allt som har ett värde i "player_id".

SELECT 	g.*, t.team_shortname, 
	p1.player_name AS p1_name, gp1.player_number AS p1_number,
	p2.player_name AS p2_name, gp2.player_number AS p2_number, 
	p3.player_name AS p3_name, gp3.player_number AS p3_number FROM game_data g 
	LEFT JOIN teams t ON t.id=g.team_id 
	LEFT JOIN players p1 ON p1.id=g.player_id 
	LEFT JOIN game_players gp1 ON gp1.player_id=g.player_id 
	LEFT JOIN players p2 ON p2.id=g.ass1_id 
	LEFT JOIN game_players gp2 ON gp2.player_id=g.ass1_id 
	LEFT JOIN players p3 ON p3.id=g.ass2_id 
	LEFT JOIN game_players gp3 ON gp3.player_id=g.ass2_id
	WHERE g.game_id=25 AND g.period=1
	ORDER BY g.period_time_min DESC, period_time_sec DESC

Det denna ska göra är att plocka ut händelser till ett online-system, och det är inte alltid "player_id" har ett värde, typ vid timeout och så. Med så fort den får ett värde blir det alltså dubbla resultat.

Nån som kan se nåt fel direkt eller behöver jag förklara mer?

Använder MSSQL

ObbelixMedlem sedan okt. 2002257 inlägg
#2

Ok.
Felet uppstår om det redan finns en post i tabellen "game_players" med spelarens id.
Fick lägga till ett villkor till så fungerade det

SELECT 	g.*, t.team_shortname, 
	p1.player_name AS p1_name, gp1.player_number AS p1_number,
	p2.player_name AS p2_name, gp2.player_number AS p2_number, 
	p3.player_name AS p3_name, gp3.player_number AS p3_number FROM game_data g 
	LEFT JOIN teams t ON t.id=g.team_id 
	LEFT JOIN players p1 ON p1.id=g.player_id 
	LEFT JOIN game_players gp1 ON gp1.player_id=g.player_id AND gp1.game_id=25
	LEFT JOIN players p2 ON p2.id=g.ass1_id 
	LEFT JOIN game_players gp2 ON gp2.player_id=g.ass1_id AND gp2.game_id=25
	LEFT JOIN players p3 ON p3.id=g.ass2_id 
	LEFT JOIN game_players gp3 ON gp3.player_id=g.ass2_id AND gp3.game_id=25
	WHERE g.game_id=25 AND g.period=1
	ORDER BY g.period_time_min DESC, period_time_sec DESC
134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)