Output van query's ordenen
Dag mensen,
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.
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?
@ m'n naamgenoot en alle anderen: Ik zal de code wel even plaatsen
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)
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)
Waarom 3 query's? je kunt toch een case in de query doen?
iets als
en dan vervolgens aan het eind van je query ORDER BY uitslag, ander veld, ander veld
Heb je heel die berekeningen niet nodig.
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 ..
Ik denk dat je zoiets zoekt:
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
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
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?
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.
Ja dat heb ik gedaan. Ik heb je query ook al iets verder aangepast. Ik krijg id en uitslag ..
De eerst rij is 1 -> 38 ..
Maar ik weet dus absoluut niet wat die 38 is.
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




