sorteren op onderling resultaat

Status
Niet open voor verdere reacties.

driessenroel

Gebruiker
Lid geworden
5 jan 2006
Berichten
17
Hallo,

Ik ben bezig met een website te maken voor een voetbalpoule voor tijdens het WK.
Nou wil ik laten de stand in verschillende poules laten zien. Alle gegevens komen uit de database, maar ik moet de teams in een poule sorteren op achtereenvolgend:
punten, gespeelde wedstrijden, onderling resultaat, doelsaldo en goals voor.

Er is eigenlijk maar een ding dat niet lukt:
Sorteren op onderling resultaat...

Kan iemand mij aub helpen, want ik wordt zo langzamerhand knettergek. Ik heb van alles geprobeerd!

Alvast bedankt

Roel
 
Wat voor code gebruik je nu voor het ophalen van de resultaten?
 
Ik heb nu deze query in gebruik waarbij ik eerst op punten selecteer, vervolgens op gespeelde wedstrijden en nu ook al op goals.
Daar moet dus nog op een of andere manier sorteren op onderling resultaat tussen.

Hier is de query:
$query = "SELECT * FROM Poulestand WHERE poule='".$poule."' ORDER BY punten DESC, gespeeld ASC, goals DESC";

Hierbij is wel al meegegeven vanuit de vorige pagina om welke poule het gaat
 
Om het onderlinge resultaat van 2 teams te kunnen bepalen zul je de uitslag van de wedstrijden van deze 2 ploegen onderling moeten kunnen vergelijken. Ik zie het niet in je vraag terug komen, maar ik neem aan dat deze gegevens ook in de database staan?

Het onderling resultaat kun je waarschijnlijk bepalen op basis van deze gegevens.
 
Ik heb inderdaad in de database staan wie de winnaar is van wedstrijd A1, A2, etc...

Maar hoe bepaal je dan in de query welke uitslag gebruikt moet worden voor het bepalen van het onderling resultaat? Het is namelijk zo dat er alleen gekeken moet worden naar de uitslag van de teams die gelijk staan, maar dat weet je natuurlijk niet van tevoren.

Dus je moet iets krijgen van:
Waar het aantal punten gelijk is kijk je naar de uitslag van de wedstrijd waarin allebei de teams met evenveel punten meegespeeld hebben...
 
Dat kun je dan natuurlijk ook in PHP zelf doen. Als blijkt dat 2 teams gelijk staan vraag je het resultaat op van de wedstrijd tussen de teams en zorg je met PHP voor de goede volgorde in de stand.
 
Ja, daar heb ik ook aan gedacht, maar ik weet niet hoe ik dat zou moeten doen. Nu heb ik namelijk staan:

while (er resultaten zijn)
{
echo "de tabel";
}

Dus dan weet ik niet hoe ik dat zou moeten gaan bekijken.
Als je daar een oplossing voor hebt.......graag!
In ieder geval bedankt voor de moeite

Roel
 
Ja, dat klopt. Maar hoe kun je dan functie maken waarmee je kunt kijken of er 2 dezelfde aantallen punten bij "punten" staan in de tabel?
 
Daarvoor zou ik de onderstaande code gebruiken. Binnen de "while" die je al hebt maak je de array "poulestand" aan die je na de while gebruikt om de punten van de teams te vergelijken.

PHP:
while ( $tabel = mysql_fetch_array($query) ) {
	$poulestand[$tabel['team_kolom']] = $tabel['punten_kolom'];	
}

foreach( $poulestand as $team => $punt ) {
	for( $i = 0; $i < count( $poulestand ); $i++ ) {
		$tegen_team = key($poulestand);
		if ( $punt == current( $poulestand ) && $team != $tegen_team  ) {
			echo $team . " - " . $tegen_team . "<br />";
		}
		next( $poulestand );
	}
	reset( $poulestand );
}
Stel: je krijgt het volgende als resultaat uit de query:

Team => Punten
T1 => 1
T2 => 2
T3 => 3
T4 => 1

dan levert de code het volgende op als resultaat:
T1 - T4
T4 - T1

Daar zou ik vervolgens mee verder gaan.

Ik hoop dat je hier iets mee kunt.
 
Laatst bewerkt:
Ik ben even in de code gedoken die je had gemaakt omdat ik nog niet zo bijster veel ervaring heb met php...

Wat er nu gebeurt is inderdaad al een eerste stap, het enige probleem is dat hij nu steeds 2 resulataten naar voren haalt, namelijk voor teams die gelijk staan vind hij op deze manier voor beide teams 1 uitwedstrijd en een thuiswedstrijd.

Op het wk is er in de groepsfase maar 1 wedstrijd onderling. Wat we dus eigenlijk moeten bedenken is een manier om in de sql al te sorteren op punten en vervolgens aantal gespeelde wedstrijden. Dit is in ieder geval al gelukt.

Misschien kunnen we daarna gegevens in een array zetten waarbij je alles in een tabelletje zet, maar waarbij het script wel gaat checken of er ergens een gelijk aantal punten voorkomt (met 2 of meer teams) en waar nodig vervolgens verder gaat sorteren op onderling resultaat...

Nogmaals ben ik op dit moment proberen zo veel mogelijk php-kennis op te doen, dus als je bij eventuele oplossingen uit kunt leggen wat er precies gebeurt, zo je me erg helpen.

Nogmaals bedankt voor de moeite

Roel
 
De code doorloopt de resultaten-array van de query en doorloopt per team nogmaals de resultaten-array, waarbij er gecontroleerd wordt of er een ander team is met een gelijk aantal punten.

Zo zal (in het voorbeeld) T1 als resultaat: T4 geven en omgekeerd. Om alleen 1 van beiden te vinden kun je binnen de code het resultaat in een array zetten (ipv te echo'en) en controleren of het omgekeerde resultaat al in de array staat. Hiermee zul je dan wel "T1-T4" krijgen, maar niet meer "T4-T1".

Ik hoop dat het een beetje duidelijk omschreven is. :)

Ik ga er overigens vanuit dat de sortering al in de query voor deze code is uitgevoerd.
 
Ik heb inderdaad in de query al gesorteerd op punten en aantal gespeelde wedstrijden.
Nu hebben we middels bovenstaande functies al kunnen kijken welke teams er onderling evenveel punten hebben.

Het enige probleem is dat ik vervolgens dus een code nodig heb waarbij dus een tabelletje aangemaakt wordt waarin de teams met bijbehorende aantal punten en wedstrijden getoond worden.

Daarbij moet dus eerst gekeken worden of er teams zijn met hetzelfde aantal punten (dat kunnen 2, 3 of 4 teams zijn, maar ook 2x2 teams) en vanuit daar verder gegaan worden.

Wanneer er geen teams met hetzelfde aantal punten zijn in een loop zetten zoals dit ongeveer:
echo "<table align='center' border='1' bordercolor='#FCC56F' width='100%' class='klein' cellpadding='0'>";
echo "<tr><td colspan='6' bgcolor='#FCC56F'><b>Stand Poule ".$poule.":</b></td></tr>";
echo "<tr bordercolor='#ffffff'><td>&nbsp;</td><td colspan='2' align='left'><b>Land:</b></td><td align='center'><b>Gespeeld:</b></td></td><td align='center'><b>Goals voor:</b></td><td align='center'><b>Punten:</b></td></tr>";

$query = "SELECT * FROM Poulestand WHERE poule='".$poule."' ORDER BY punten DESC, goals DESC";
$result = mysql_query($query);
$i=1;
while ($rij = mysql_fetch_array($result))
{
echo "<tr bordercolor='#ffffff'>";
echo "<td>".$i."</td>";
$i++;
echo "<td width='18' align='center'>";
$sql5 = "SELECT * FROM vlag_klein WHERE land='".$rij['land']."'";
$afbeeldingen5 = mysql_query($sql5);
if (mysql_num_rows($afbeeldingen5) > 0)
{
while ($afb_rij5 = mysql_fetch_array($afbeeldingen5))
{
$bestandsnaam = $sitepad.$afb_rij5["vlagcode"].$afb_rij5["bestandstype"];
echo "<img src=\"$bestandsnaam\" />&nbsp;";
}
} else
{
echo "Geen afbeelding beschikbaar";
}
echo "</td>";
echo "<td align=left' width='200'>".$rij['land']."</td><td align='center'>".$rij['gespeeld']."</td><td align='center' width='100'>".$rij['goals']."</td><td align='center'>".$rij['punten']."</td></tr>";
}
echo "</table><br />";


Wanneer er wel teams met hetzelfde aantal punten zijn, moet er op een of andere manier dus tijdens het echoën bepaald moeten worden bij wie het onderling resultaat beter is en daarop de volgorde van echoën bepalen.

Wanneer je oplossingen hebt, kun je dan misschien een code maken waarmee bovenstaande inderdaad gebeurd, want zoals ik in het eerste bericht ook al meldde:
ik ben er echt al heel lang mee aan het puzzelen...

Bedankt voor de moeite
 
Ik denk niet dat het mogelijk is om tijdens het echoën het onderling resultaat te bepalen en daarop te sorteren. Om dat voor elkaar te krijgen zou ik persoonlijk de gegevens van de query in een array zetten en daarna de sortering m.b.v. php (evt opnieuw) toepassen.

Ik weet momenteel nog niet precies hoe je dit het beste zou kunnen doen, maar er zal waarschijnlijk vrij veel php code nodig zijn om het werkend te krijgen. Ik wil niet zeggen dat het onmogelijk is, maar het is wel veel werk om het op te bouwen. :(

Is de site in zijn huidige vorm overigens al ergens te bezichtigen, zodat we een idee kunne krijgen van de opbouw? :)
 
Helaas is de website nog niet te bewonderen :)p ) omdat deze in een beveiligde map staat van de website van mijn werkgever.

Ik wil nu gewoon maar gaan proberen een code te schrijven waarmee binnen php toch het juiste berekent wordt...

Heb ik natuurlijk wel meteen mijn eerste vraag:
Hoe krijg ik het volgende voor elkaar:

We hebben uit de query 4 landen als resultaat.
Nu wil ik ieder land + gegevens in een array plaatsen:

$land1 = eerste land uit de query
$land2 = tweede land uit de query
etc etc...

Bij bovenstaande moet ook nog komen dat de gegevens bij dat land (punten etc) in een array geplaatst worden.

Ik denk als ik weet hoe ik dit moet doen, dat ik al een aardig eindje in de richting kan komen.

Bedankt!
 
Daarvoor is het misschien handig om een array binnen een array te maken. Bijvoorbeeld binnen de while de volgende code te gebruiken:
PHP:
$resultaten[$rij['land']] = array( $rij['gespeeld'], $rij['goals'], $rij['punten'] )
Zo krijg je 1 grote array met alle resultaten van de query, waar je vervolgens verder mee kunt werken.
 
Dat is denk ik inderdaad de richting die we moeten zoeken, ja.
Dan kan ik van daaruit verder werken.
Maar hoe krijg ik het nu voor elkaar om 2 verschillende landen met elkaar te vergelijken, want nu staat er $resultaten['land'], maar je weet niet welke landen...

Je kunt niet vragen "IF $resultaten['land']['punten'] == $resultaten['land']['punten']"
Dan is het nodig om aan een land een nummer ofzo te hangen (1 t/m 4) zodat je kunt zeggen:
If land1['punten'] (meeste punten, want reeds in query gesorteerd) == land['punten']
 
Zo kun je de landen een nummer geven:
PHP:
$poulestand[] = array( "land" => "Team1", "punten" => 2, "gespeeld" => 3, "goals" => 4 );
met $poulestand[0]['land'] kun je dan de naam van het land aanroepen ( Team1 )

Ik weet niet of dat de beste oplossing is, maar daar moet het wel mee kunnen :)
 
Misschien wel weer een hele domme vraag, maar ik kan alleen maar bijleren:

waarom staat er achter punten '=> 2' enzo?

Dat is waarschijnlijk het resultaat van de query of niet? Moet ik die getallen erin laten staan?

We komen trouwens wel steeds verder in de buurt denk ik

Bedankt!
 
Dat klopt, die kun je vervangen door $rij['punten'] ( net als de andere waarden ) :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan