[SQL] Sort

Status
Niet open voor verdere reacties.

Razing

Gebruiker
Lid geworden
13 okt 2008
Berichten
167
Ik heb een vraag ik heb hieronder een script gepost met spelers etc welke aanwezig zijn. Nu wil ik dat hij sorteert op de aantal aanwezigheid van de speler. Nu heb ik alles geprobeerd, maar heb gehoort dat dit moet werken met JOIN?

Zou iemand mij kunnen helpen?

PHP:
<img src="images/subteksten/trainingsopkomst.jpg" />
<br />
<?php
// Gemaakt door Harm Wesselink
include ('cms/training/training_config.php');

mysql_connect($host,$user,$password) or die(mysql_error());
mysql_select_db($txt_db_name);

$alleTrainingen = mysql_query ( "SELECT training_id FROM trainingen" );
$aantalTrainingen = mysql_num_rows ( $alleTrainingen );
$alleSpelers = mysql_query ( "SELECT spelerid FROM spelers" );
$aantalSpelers = mysql_num_rows ( $alleSpelers );
?>
<TABLE width="373" BORDER="0" CELLPADDING="2" CELLSPACING="2">
<TR>
<TD width="208" align="left"><b>Spelers</b></TD>
<TD width="63"><b>Statistieken</b></TD>
</TR>
<?php
	$query_2 = "SELECT * FROM `spelers` ORDER BY spelernummer ASC";
	$sql_2 = mysql_query($query_2) or die ( mysql_error( ) );
		while($rij_2 = mysql_fetch_object($sql_2)){
	$spelerid = $rij_2->spelerid;
	$spelernaam = $rij_2->spelernaam;
	$spelernummer = $rij_2->spelernummer;
?>
<TR>
<TD width="208" align="left">
<?php echo $spelernummer ?>. <?php echo $spelernaam ?></TD></TD>
<TD width="63" align="center">
<?php
$wedstrijden = mysql_query ( "SELECT id FROM trainingen_spelers WHERE spelerid = '" . $rij_2->spelerid . "'");
 
$aantalAanwezig = mysql_num_rows ( $wedstrijden );
$aantalAfwezig = $aantalTrainingen - $aantalAanwezig;
 
echo '<font color="green"><strong>'.$aantalAanwezig.'</strong></font>';
echo '&nbsp;&nbsp;&nbsp;';
echo '<font color="red">('.$aantalAfwezig.')</font>';
?>
</TD></TR>
<?php
}
?>
</TABLE>
 
Je wilt sorteren op het aantal keer dat een speler aanwezig is?

Daarvoor kun je een JOIN met een GROUP BY gebruiken, ongeveer zo:

[sql]
SELECT velden
FROM spelers
INNER JOIN trainingen ON spelers.id = trainingen.speler_id
GROUP BY spelers.id
ORDER BY COUNT( spelers.id )
[/sql]

Group by groepeert alle rijen met dezelfde spelers id's, en Count telt het aantal rijen met dezelfde spelers id (dat zijn dus het aantal verschillende trainingen, want elke training levert een rij op)

Succes ermee ;)
 
Je wilt sorteren op het aantal keer dat een speler aanwezig is?

Daarvoor kun je een JOIN met een GROUP BY gebruiken, ongeveer zo:

[sql]
SELECT velden
FROM spelers
INNER JOIN trainingen ON spelers.id = trainingen.speler_id
GROUP BY spelers.id
ORDER BY COUNT( spelers.id )
[/sql]

Group by groepeert alle rijen met dezelfde spelers id's, en Count telt het aantal rijen met dezelfde spelers id (dat zijn dus het aantal verschillende trainingen, want elke training levert een rij op)

Succes ermee ;)

Ik heb even wat dingen geprobeerd, maar het wil niet lukken om hem in de pagina verwerkt te krijgen. Zou u mij kunnen helpen?
 
Wat heb je nu? Jij selecteert nu namelijk alle speler id's daarna ga je hun aanwezigheid controleren. Je kunt beter een query draaien die dit doet voor alle spelers tegelijk en deze ook sorteert. Frats gaf zo'n query.

Ik denk overigens dat de query iets uitgebreiden wordt, omdat je gebruik maakt van een tussen tabel (trainingen_spelers).

[sql]
SELECT naam, COUNT(trainingen_spelers.speler_id) AS aantal_aanwezig FROM spelers INNER JOIN trainingen_spelers ON spelers.id = trainingen_spelers.speler_id INNER JOIN trainingen ON trainingen_spelers.training_id = trainingen.id
GROUP BY naam
ORDER BY aantal_aanwezig DESC
[/sql]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan