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.
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);
?>
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
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?
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