Ik zit met een klein probleempje. Ik heb een x-aantal query's die een berekening uitvoeren, met als uitkomst een waarde. Nou gebruik is voor het resultaat een soort som om de gegevens van al deze query's op te tellen, te vermenigvuldigen enz. enz.
Alleen nou zit ik dus met het probleem dat ik niet meer dat ik de uitkomst niet meer kan sorteren. Iemand een idee hoe ik dat aan kan passen?
@ m'n naamgenoot en alle anderen: Ik zal de code wel even plaatsen
<?php
if(!empty($_GET['seizoen'])){
$_GET['seizoen'] = $_GET['seizoen'];
}
else{
$_GET['seizoen'] = '2009-2010';
}
$query = mysql_query("SELECT w.thuisclub_id AS id, c.naam AS naam FROM wedstrijden w, clubs c WHERE c.id = w.thuisclub_id GROUP BY id");
$i = 1;
while($rij = mysql_fetch_assoc($query)){
$winst = mysql_result(mysql_query("SELECT
COUNT(id)
FROM
wedstrijden
WHERE
(thuisclub_id = '".$rij['id']."'
AND
thuisgoal > uitgoal
AND
thuisgoal <> '999'
AND
uitgoal <> '999') OR (uitclub_id = '".$rij['id']."'
AND
thuisgoal < uitgoal
AND
thuisgoal <> '999'
AND
uitgoal <> '999'
AND
seizoen = '".mysql_real_escape_string($GET['seizoen'])."')
"),0);
$gelijkspel = mysql_result(mysql_query("SELECT
COUNT(id)
FROM
wedstrijden
WHERE
(thuisclub_id = '".$rij['id']."'
AND
thuisgoal = uitgoal
AND
thuisgoal <> '999'
AND
uitgoal <> '999') OR (uitclub_id = '".$rij['id']."'
AND
thuisgoal = uitgoal
AND
thuisgoal <> '999'
AND
uitgoal <> '999'
AND
seizoen = '".mysql_real_escape_string($GET['seizoen'])."')
"),0);
$verlies = mysql_result(mysql_query("SELECT
COUNT(id)
FROM
wedstrijden
WHERE
(thuisclub_id = '".$rij['id']."'
AND
thuisgoal < uitgoal
AND
thuisgoal <> '999'
AND
uitgoal <> '999') OR (uitclub_id = '".$rij['id']."'
AND
thuisgoal > uitgoal
AND
thuisgoal <> '999'
AND
uitgoal <> '999'
AND
seizoen = '".mysql_real_escape_string($GET['seizoen'])."')
"),0);
// totaal aantal doelpunten gescoord door team
$doelpunten_thuis_pro = mysql_result(mysql_query("SELECT SUM(thuisgoal) FROM wedstrijden WHERE thuisclub_id = '".$rij['id']."'"),0);
$doelpunten_uit_pro = mysql_result(mysql_query("SELECT SUM(uitgoal) FROM wedstrijden WHERE uitclub_id = '".$rij['id']."'"),0);
$doelpunten_pro = $doelpunten_thuis_pro + $doelpunten_uit_pro;
// totaal aantal doelpunten gescoord door tegenstander
$doelpunten_thuis_contra = mysql_result(mysql_query("SELECT SUM(uitgoal) FROM wedstrijden WHERE thuisclub_id = '".$rij['id']."'"),0);
$doelpunten_uit_contra = mysql_result(mysql_query("SELECT SUM(thuisgoal) FROM wedstrijden WHERE uitclub_id = '".$rij['id']."'"),0);
$doelpunten_contra = $doelpunten_thuis_contra + $doelpunten_uit_contra;
$gespeeld = $winst+$gelijkspel+$verlies;
$punten = $winst*3+$gelijkspel;
$content .=<<<EOF
<div class="lijstrij">
{$i} ID: {$rij['id']} Team: {$rij['naam']} Gespeeld: {$gespeeld} Winst: {$winst} Gelijk: {$gelijkspel} Verlies: {$verlies} Punten: {$punten} Doelpunten voor {$doelpunten_pro} Doelpunten tegen {$doelpunten_contra}
</div>
EOF;
$i++;
}
?>
Het is dus de bedoeling dat de outup geordend is op Punten dan verschil tussen winst en verlies (kleinste verschil bovenaan) en dan op voor en tegendoelpunten (ook kleinste verschil bovenaan)
Waarom 3 query's? je kunt toch een case in de query doen?
iets als
SELECT velden,
uitslag =
CASE
WHEN punten_voor = punten_tegen THEN 'Gelijk spel'
WHEN punten_voor > punten_tegen THEN 'Winst'
WHEN punten_voor < punten_tegen THEN 'Verlies'
END
en dan vervolgens aan het eind van je query ORDER BY uitslag, ander veld, ander veld
mysql_result(mysql_query("SELECT
COUNT(id),
datum,
uitslag =
CASE
WHEN thuisgoal = uitgoal THEN 'Gelijk spel'
WHEN thuisgoal > uitgoal THEN 'Winst'
WHEN thuisgoal < uitgoal THEN 'Verlies'
END
FROM
wedstrijden
WHERE
thuisclub_id = '".$rij['id']."'
OR
uitclub_id = '".$rij['id']."'
AND
seizoen = '".mysql_real_escape_string($GET['seizoen'])."')
ORDER BY uitslag, datum, veld, veld...
"),0);
je hebt dan alle rijen (gelijkspel, winst, verlies) in 1 dataset
Overigens kunnen de laatste 2 query's gewoon in 1.
SELECT
SUM(thuisgoal) AS punten_voor,
SUM(uitgoal) AS punten_tegen
FROM
tabel
WHERE
id=...
Ik heb het e.e.a. geprobeerd met deze query, maar ik kom er echt niet uit!
Verder dan (zie code) kom ik echt niet. En zelfs dat geeft 38 bij id 1, maar wat is 38?
while($rij = mysql_fetch_assoc($query)){
$winst = mysql_result(mysql_query("SELECT
COUNT(id),
CASE
WHEN thuisgoal = uitgoal THEN 'Gelijk spel'
WHEN thuisgoal > uitgoal THEN 'Winst'
WHEN thuisgoal < uitgoal THEN 'Verlies'
END as uitslag
FROM
wedstrijden
WHERE
thuisclub_id = '".$rij['id']."'
OR
uitclub_id = '".$rij['id']."'
ORDER BY
uitslag
"),0);
$content .=<<<EOF
<div class="lijstrij">
$i {$winst}
</div>
EOF;
$i++;
}
die 38 is een resultaat van "COUNT(id)", je gebruikt nergens het resultaat van uitslag omdat je steeds maar het 1e kolom van je resultaat pakt met mysql_result