Output van query's ordenen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jurgen B

Jurgen B

26/06/2009 10:49:00
Quote Anchor link
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.
 
PHP hulp

PHP hulp

20/10/2020 20:12:56
 
Jurgen assaasas

Jurgen assaasas

26/06/2009 10:54:00
Quote Anchor link
Doe je dit in PHP of in SQL? Als je in SQL doet kun je toch gewoon order by?
 
Jurgen B

Jurgen B

26/06/2009 11:16:00
Quote Anchor link
@ m'n naamgenoot en alle anderen: Ik zal de code wel even plaatsen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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)
 
Jurgen assaasas

Jurgen assaasas

26/06/2009 11:25:00
Quote Anchor link
Waarom 3 query's? je kunt toch een case in de query doen?

iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


en dan vervolgens aan het eind van je query ORDER BY uitslag, ander veld, ander veld

Heb je heel die berekeningen niet nodig.
 
Jurgen B

Jurgen B

26/06/2009 11:40:00
Quote Anchor link
Zou je deze code iets verder uit willen schrijven? Ik ben niet zo bekend met CASES ..
 
Jurgen assaasas

Jurgen assaasas

26/06/2009 11:49:00
Quote Anchor link
Ik denk dat je zoiets zoekt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
                            


je hebt dan alle rijen (gelijkspel, winst, verlies) in 1 dataset

Overigens kunnen de laatste 2 query's gewoon in 1.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    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
 
Jurgen B

Jurgen B

26/06/2009 12:29:00
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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++;
}
 
Jurgen assaasas

Jurgen assaasas

26/06/2009 12:33:00
Quote Anchor link
Test eerst eens in bijv PHPMyAdmin of je de juiste dataset krijgt. dat lijkt me eerst wat belangrijker.
 
Jurgen B

Jurgen B

26/06/2009 13:40:00
Quote Anchor link
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.
 
M Ypma

M Ypma

26/06/2009 14:08:00
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.