de eerste 2 winnaars tonen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick Bdo

Patrick Bdo

16/11/2010 18:14:09
Quote Anchor link
In database heb ik het volgende tabel,
id - id_wedstrijd - score

Inhoud van tabel is,
1 - 3 - 1 (dus wedstrijd 3 = 1 punt)
2 - 6 - 2 (wedstrijd 6 = 2 punten)
3 - 3 - 2 (wedstrijd 3 = 2 punten)
4 - 4 - 1 (wedstrijd 4 = 1 punt)
5 - 4 - 1 (wedstrijd 4 = 1 punt)
6 - 6 - 1 (wedstrijd 6 = 1 punt)

Wedstrijd 3 heeft dus 3 punten in totaal
Wedstrijd 6 heeft 3 punten
Wedstrijd 4 heeft 2 punten

Ik wil deze rekensom op de site tonen

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
<?php
    // STAP 1 : id's van wedstrijden ophalen
    $aQuery    = "SELECT id FROM wedstrijd";
    $result = mysql_query($aQuery);
    
    // STAP 2 : id's wedstrijden vergelijken met puntenscore
    while ($wedstrijd = mysql_fetch_array($result)) {                        
        $bQuery    = "SELECT SUM(score) as kampioen
                   FROM punten
                   WHERE id_wedstrijd = '"
. $wedstrijd['id'] . "'";
        $result = mysql_query($bQuery);
    
    // STAP 3 : de 3 kampioenen laten zien
        while ($ranglijst = mysql_fetch_array($result)) {
            echo $ranglijst['kampioen'] . " ";
            }
        }

?>

Uitkomst is 3 3 2

Nu wil ik alleen de punten van de eerste 2 winnaars laten zien. Dus 3 3

Onderstaande werkt uiteraard niet omdat hij in een loop zit.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    $bQuery
    = "SELECT SUM(score) as kampioen
               FROM punten
               WHERE id_wedstrijd = '"
. $wedstrijd['id'] . "'
               ORDER BY id_wedstrijd ASC LIMIT 2"
;
?>


Maar hoe krijg ik het wel werkend?
 
PHP hulp

PHP hulp

22/12/2024 18:30:27
 
Noppes Homeland

Noppes Homeland

16/11/2010 18:49:08
Quote Anchor link
Denk zelf even na, degene met de meeste punten die werkt in vele gevallen, dus sorteren op een wedstrijd_id is dan geheel niet van toepassing

En bij de where clause zet ik ook zo mijn vraagtekens, wat doet dat in de punten tabel, een wedstrijd_id kwa naamgeving zal dan uniek zijn en dus zul je maar 1 record terugkrijgen in mijn intrepetatie dan.
 

16/11/2010 18:50:18
Quote Anchor link
Ik denk dat je datamodel ook niet helemaal correct is, maar goed, dat kan ik hier natuurlijk niet helemaal aan zien.
Oplossing: Query buiten de loop halen.Nee, de zooi klopt gewoon niet.
Waarvoor is $aQuery? Zie het nut er niet van in.
Gewijzigd op 16/11/2010 18:51:50 door
 
Patrick Bdo

Patrick Bdo

16/11/2010 19:38:42
Quote Anchor link
Karl Karl op 16/11/2010 18:50:18:
Ik denk dat je datamodel ook niet helemaal correct is, maar goed, dat kan ik hier natuurlijk niet helemaal aan zien.
Oplossing: Query buiten de loop halen.Nee, de zooi klopt gewoon niet.
Waarvoor is $aQuery? Zie het nut er niet van in.


$aQuery haalt gegevens uit tabel wedstrijd
Daar staan alle wedstrijden

$bQuery haalt alle gegevens uit tabel punten
Daar staan alle punten in vermeld. Met id van wedstrijd - id_wedstrijd


Toevoeging op 16/11/2010 19:40:42:

Noppes Homeland op 16/11/2010 18:49:08:
Denk zelf even na, degene met de meeste punten die werkt in vele gevallen, dus sorteren op een wedstrijd_id is dan geheel niet van toepassing

En bij de where clause zet ik ook zo mijn vraagtekens, wat doet dat in de punten tabel, een wedstrijd_id kwa naamgeving zal dan uniek zijn en dus zul je maar 1 record terugkrijgen in mijn intrepetatie dan.


Ik krijg 3 records terug - 3 3 2
 

16/11/2010 20:02:02
Quote Anchor link
Kijk eens naar joins.
Maar eerst zou ik als ik jou was eens normaliseren.
 
Patrick Bdo

Patrick Bdo

16/11/2010 20:25:04
Quote Anchor link
Karl Karl op 16/11/2010 20:02:02:
Kijk eens naar joins.
Maar eerst zou ik als ik jou was eens normaliseren.


Een ieder kan punten geven aan een wedstrijd.
persoon 1 geeft 4 pnt aan wedstrijd 3
persoon 2 geeft 2 pnt aan wedstrijd 6
etc. etc.

Deze punten heb ik in een aparte tabel staan

De bedoeling is dus eerst de wedstrijd ID te selecteren
En dan punten optellen die gekoppeld zijn aan wedstrijd ID
en vervolgens de 2 hoogste scores tonen.

Ik weet niet hoe ik dit met normaliseren.
 
Noppes Homeland

Noppes Homeland

16/11/2010 20:40:21
Quote Anchor link
Dus wat wil je nu eigenlijk zien als resultaat?

het wedstrijd_id met het gesommeerd aantal punten?
 

16/11/2010 20:41:22
Quote Anchor link
Patrick Baldo op 16/11/2010 20:25:04:
Karl Karl op 16/11/2010 20:02:02:
Kijk eens naar joins.
Maar eerst zou ik als ik jou was eens normaliseren.


Een ieder kan punten geven aan een wedstrijd.
persoon 1 geeft 4 pnt aan wedstrijd 3
persoon 2 geeft 2 pnt aan wedstrijd 6
etc. etc.

Deze punten heb ik in een aparte tabel staan

De bedoeling is dus eerst de wedstrijd ID te selecteren
En dan punten optellen die gekoppeld zijn aan wedstrijd ID
en vervolgens de 2 hoogste scores tonen.

Ik weet niet hoe ik dit met normaliseren.


Dit is niet in overeenstemming met je datamodel.
 
Patrick Bdo

Patrick Bdo

16/11/2010 21:17:15
Quote Anchor link
Noppes Homeland op 16/11/2010 20:40:21:
Dus wat wil je nu eigenlijk zien als resultaat?

het wedstrijd_id met het gesommeerd aantal punten?


Dat is me gelukt met bovenstaande code.

Alleen krijg ik de opgetelde punten van alle wedstrijden.
En ik wil 2 wedstrijden met de meeste punten.
 
Noppes Homeland

Noppes Homeland

16/11/2010 21:21:16
Quote Anchor link
Voeg die twee queries dan eens samen.

En voortaan wel eerst inlezen op het SQL onderwerp, dan hoef je namenlijk dit soort zaken ook niet te vragen.

http://www.w3schools.com/sql/sql_groupby.asp
 



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.