Output van query's ordenen
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?
Alvast bedankt.
Doe je dit in PHP of in SQL? Als je in SQL doet kun je toch gewoon order by?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?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++;
}
?>
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)
iets als
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
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
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
Heb je heel die berekeningen niet nodig.
Zou je deze code iets verder uit willen schrijven? Ik ben niet zo bekend met CASES ..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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);
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.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT
SUM(thuisgoal) AS punten_voor,
SUM(uitgoal) AS punten_tegen
FROM
tabel
WHERE
id=...
SUM(thuisgoal) AS punten_voor,
SUM(uitgoal) AS punten_tegen
FROM
tabel
WHERE
id=...
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
Verder dan (zie code) kom ik echt niet. En zelfs dat geeft 38 bij id 1, maar wat is 38?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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++;
}
$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++;
}
Test eerst eens in bijv PHPMyAdmin of je de juiste dataset krijgt. dat lijkt me eerst wat belangrijker.
De eerst rij is 1 -> 38 ..
Maar ik weet dus absoluut niet wat die 38 is.
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