webForumDet fria alternativet

Hämta rätt spelare på rätt position?

Databaser & SQL

3 svar · 561 visningar · startad av streetrobban

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Tja,

Jag håller på att skriva ut en laguppställning på en bild av en fotbollsplan. Jag har angett spelarna i en tabell och vilka positioner de har hämtas via ett ID på positionerna från en annan tabell.

Jag undrar dock hur jag skriver ut alla spelarna på en gång för att sedan sätta ut dem på rätt plats på plan?

I dagsläget skulle jag kunna lösa det genom att göra en SELECT sats för varje position och använda WHERE Position = 29, där t.ex. 29 = AC (Anfallare Center). Men då kommer jag att behöva göra 11 SELECT satser med olika WHERE Position = XX, och det känns som det kanske finns en bättre lösning?

Så, hur hämtar jag alla spelarna (som har rätt GameID för den aktuella matchen) samtidigt och även positionerna som används för den aktuella uppställningen?

Detta är koden jag använder för att hämta en spelare med position 29:

			<?php
			// Öppna databasen
			require 'includes/db.php';

			// Hämta matchens ID
			$ThisGameID = $_GET['ID'];

			// Hämta spelaren på rätt position
			$get = mysql_query("SELECT Pl.ID, Pl.Firstname, Pl.Lastname, Li.PlayerID, Li.GameID, Li.Captain, Li.Position, Po.ID AS PositionID, Po.Name
			FROM Lineups Li
			LEFT JOIN Players AS Pl ON Pl.ID = Li.PlayerID
			LEFT JOIN Positions AS Po ON Po.ID = Li.Position
			WHERE Li.GameID = '$ThisGameID' && Li.Position = 29");
			while($row = mysql_fetch_array($get)) 
			{
				// Hämta från Players
				$ID = $row['ID'];
				$Firstname = $row['Firstname'];
				$Lastname = $row['Lastname'];

				// Hämta från Lineups
				$PlayerID = $row['PlayerID'];
				$GameID = $row['GameID'];
				$Captain = $row['Captain'];
				$Position = $row['Position'];

				// Hämta från Positions
				$PositionID = $row['PositionID'];
				$Name = $row['Name'];

				echo "<!-- #### START TABELL - PLAN #### -->";
				echo "<table style=\"width: 550px; height: 400px; background-image: url('images/field.gif')\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">";
				echo "<tr>";
				echo "<td style=\"width: 550px; height: 80px; padding: 0px; text-align: center\">";
				echo "<span class=\"field\">$Firstname $Lastname</span>";
				echo "</td>";
				echo "</tr>";
			}

			// Stäng databasen
			mysql_close($open);
			?>

Jag försökte vara så tydlig som möjligt, men det kanske är svårt att förstå vad jag menar?

Medlem sedan mars 2007845 inlägg
#2

Förutsätter att PositionID är unik per uppsättning.

while($row = mysql_fetch_array($get)) 
{
	$spelar_arr[$row['PositionID']] = $row;
}

Sen ekar du ut $spelar_arr[position]['Firstname'] osv. Du behöver inte kopiera över dom till variabler först utan kan använda dom direkt från arrayen.

Medlem sedan dec. 200012 464 inlägg
#3

Gör sorteringen direkt i SQL-frågan

order by case position 
       when 'MV' then 1
...
       when 'AC' then 10
       when 'AH' then 11 end
Medlem sedan jan. 20011 140 inlägg
#4

drew: Hur menar du? På följande kod får jag bara ut en spelare. Sedan blir det tomt.

			<?php
			// Öppna databasen
			require 'includes/db.php';

			// Hämta matchens ID
			$ThisGameID = $_GET['ID'];

			// Hämta spelaren på rätt position
			$get = mysql_query("SELECT AtPl.ID, AtPl.Firstname, AtPl.Lastname, AtLi.PlayerID, AtLi.GameID, AtLi.Captain, AtLi.Position, AtPo.ID AS PositionID, AtPo.Name
			FROM Lineups AtLi
			LEFT JOIN Players AS AtPl ON AtPl.ID = AtLi.PlayerID
			LEFT JOIN Positions AS AtPo ON AtPo.ID = AtLi.Position
			WHERE AtLi.GameID = '$ThisGameID' && AtLi.Position = 29");
			while($row = mysql_fetch_array($get)) 
			{
				// Hämta från Players
				$ID = $row['ID'];
				$Firstname = $row['Firstname'];
				$Lastname = $row['Lastname'];

				// Hämta från Lineups
				$PlayerID = $row['PlayerID'];
				$GameID = $row['GameID'];
				$Captain = $row['Captain'];
				$Position = $row['Position'];

				// Hämta från Positions
				$PositionID = $row['PositionID'];
				$Name = $row['Name'];

				$spelar_arr[$row['PositionID']] = $row;

				echo "<!-- #### START TABELL - PLAN #### -->";
				echo "<table style=\"width: 550px; height: 400px; background-image: url('images/field.gif')\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">";
				echo "<tr>";
				echo "<td style=\"width: 550px; height: 80px; padding: 0px; text-align: center\">";
				echo "<span class=\"field\">".$spelar_arr['29']['Lastname']."</span>";
				echo "</td>";
				echo "</tr>";

				echo "<tr>";
				echo "<td style=\"width: 550px; height: 80px; padding: 0px; text-align: center\">";
				echo "<span class=\"field\">".$spelar_arr['20']['Lastname']."</span>";
				echo "</td>";
				echo "</tr>";

				echo "<tr>";
				echo "<td style=\"width: 550px; height: 80px; padding: 0px; text-align: center\">";
				echo "<span class=\"field\">".$spelar_arr['10']['Lastname']."</span>";
				echo "</td>";
				echo "</tr>";

			}

			// Stäng databasen
			mysql_close($open);
			?>
258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)