webForumDet fria alternativet

Skytteliga

10 svar · 638 visningar · startad av streetrobban

streetrobbanMedlem sedan jan. 20011 140 inlägg
#1

Tja,

Jag har gjort en skytteliga där jag i en tabell sparar en rad för varje mål med ID, spelarens ID och matchens ID. Jag undrar sedan hur jag gör för att skriva ut posterna som en skytteliga. Det kommer ju att ligga flera poster som har samma spelar/match ID, och kanske både och. Listan ska se ut som en vanlig skytteliga.

Spelare 1, 13 mål. (Alltså 13 poster i tabellen med olika match ID etc.)
Spelare 2, 10 mål.
Spelare 3, 8 mål.

Tacksam för svar.

Peter SMedlem sedan dec. 20025 483 inlägg
#2

select playerId, count(*) from tbl group by playerId order by 2 desc

streetrobbanMedlem sedan jan. 20011 140 inlägg
#3

Hmm, koden verkar sortera spelarna i rätt ordning. Hur kan man skriva ut antal mål då?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Antalet mål har du i count(*), d.v.s. resultatet av SQL-frågan blir typ:

1 13
2 11
3 10
4 8

streetrobbanMedlem sedan jan. 20011 140 inlägg
#5

Hmm förstår inte vad jag ska skriva ut riktigt? :) Jag löste det på ett annat sätt som antagligen inte är lika bra, men här min kod:

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

	// Deklarera bakgrundens färg
	$bg = '';

	// Hämta alla spelare som gjort mål
	$get = mysql_query("SELECT Go.PlayerID, COUNT(*), Go.GameID, Pl.ID AS PlayersID, Pl.Firstname AS Firstname, Pl.Lastname AS Lastname
	FROM Players Pl
	INNER JOIN Goals AS Go ON Go.PlayerID = Pl.ID
	GROUP BY Go.PlayerID
	ORDER BY 2 DESC");
	while($row = mysql_fetch_array($get)) 
	{
		// Hämta från Goals
		$PlayerID = $row['PlayerID'];
		$GameID = $row['GameID'];

		// Hämta från Players
		$PlayersID = $row['PlayersID'];
		$Firstname = $row['Firstname'];
		$Lastname = $row['Lastname'];

		// Räkna antalet mål för varje spelare på listan
		$get2 = mysql_query("SELECT *
		FROM Goals
		WHERE PlayerID = '$PlayersID'");
		$Goals = mysql_num_rows($get2);

		// Färga varannan rad
		$bg = $bg != '#FFFFFF' ? '#FFFFFF' : '#F7F8F9';

		echo "<tr>";
		echo "<td style=\"width: 200px; padding: 4px; background-color: $bg\">";
		echo "$Goals <a href=\"index.php?p=Player&ID=$PlayerID\" title=\" Visa info om $Firstname $Lastname \">$Firstname $Lastname</a>";
		echo "</td>";
		echo "</tr>";
	}

	// Stäng databasen
	mysql_close($open);
	?>
@ndersMedlem sedan juni 200032 969 inlägg
#6

Sätt ett alias på fältvärdet så har du ett vanligt fältnamn att använda i php-koden. Det är helt klart att föredra gentemot ditt sätt att ställa en extra sql-fråga per post i din loop.

select playerId, count(*) [b]as goalsscored[/b] from tbl group by playerId order by 2 desc
streetrobbanMedlem sedan jan. 20011 140 inlägg
#7

Aha, det funkade ju perfekt! Tack för hjälpen.

Det kommer dock en följdfråga; Jag har en liknande tabell med gula/röda kort i som jag listar på samma sätt. Jag vill dock kunna skriva ut antalet gula kort (WHERE Type = 'Y') eller röda kort (WHERE Type = 'R') på samma sätt som med Goals vi precis gjorde. Vet du hur det funkar?

Peter SMedlem sedan dec. 20025 483 inlägg
#8
select t.playerId, count(*) as goalsscored,
(select sum(case when type = 'Y' then 1 else 0 end) from cards where playerId = t.playerId) as yellowcards,
(select sum(case when type = 'R' then 1 else 0 end) from cards where playerId = t.playerId) as redcards
from tbl as t group by t.playerId order by 2 desc
streetrobbanMedlem sedan jan. 20011 140 inlägg
#9

Tack för dina svar Peter S! :)

Peter SMedlem sedan dec. 20025 483 inlägg
#10

Så lite så :) Hoppas det funkar.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#11

Japp det funkar klockers :) Tur att det finns gurus som du!

133 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)