Programma - Competitie - Gedeeltelijk

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Jo Immanuel

Jo Immanuel

12/07/2015 10:50:29
Quote Anchor link
Beste forumleden,

Ik heb weer een probleem... Ik zal eerst de situatie uitleggen.

Doel: Ik heb op mijn site 4 regels waarop ik de laatste 2 gespeelde wedstrijden (+ uitslag) en 2 aankomende wedstrijden wil laten zien. Met als uitzonderingsituaties het begin en het einde van het seizoen.

Stel: X = aantal te tonen te spelen wedstrijden
Y = aantal te tonen gespeelde wedstrijden

Dan zijn er 5 situaties:
1: X = 4 & Y = 0 (= begin van het seizoen)
2: X = 3 & Y = 1 (= 1 wedstrijd na begin seizoen)
3: X = 2 & Y = 2 (= midden van het seizoen)
4: X = 1 & Y = 3 (= 1 wedstrijd voor einde seizoen)
5: X = 0 & Y = 4 (= einde van het seizoen)

Ik wil dit als volgt bereiken: .

Stap 1:
Ik maak variabelen X en Y aan en zet deze op de standaard waarden $X=2 & $Y=2 (midden van het seizoen)

Stap 2:
Ik voer 2 queries uit: Query A voor de nog te spelen wedstrijden en query B voor de gespeelde wedstrijden (+ uitslag).

Stap 3:
Ik ga controleren of er sprake is van een uitzonderingssituatie (en welke) en pas de waarden van $X en $Y daarop aan, als volgt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$tespelenwedstrijdenquery = mysqli_query($hello, $queryA);
$countA = mysqli_num_rows($tespelenwedstrijdenquery);
if($countA >= 2){$X = 2;} else if($countA == 1){$X = 1;} else if ($countA == 0){$X = 0;}

$gespeeldewedstrijdenquery = mysqli_query($hello, $queryB);
$countB = mysqli_num_rows($gespeeldewedstrijdenquery);
if($countB >= 2){$Y = 2;} else if($countB == 1){$Y = 1;} else if ($countB == 0){$Y = 0;}


Stap 4:
De 2 queries in arrays zetten en variabelen aanmaken die ge-echoed kunnen worden.

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
while ($tespelenwedstrijden = mysqli_fetch_array($tespelenwedstrijdenquery, MYSQLI_ASSOC)) {
    if($X == 1){  
    $datum_regel4 = $tespelenwedstrijden['datum']
        $competitie_regel4 = $tespelenwedstrijden['comeptitie']
        $wedstrijdID_regel4 = $tespelenwedstrijden['wedstrijdID']
        $thuisploeg_regel4 = $tespelenwedstrijden['thuisclub']
        etc...
        ;}
    else if($X == 2){  
        $n = 3;
    for ($m = 0; $m < 2; $m++) {
        ${"datum_regel".$n} = $tespelenwedstrijden['datum'];    
        ${"competitie_regel".$n} = $tespelenwedstrijden['comeptitie']
            ${"wedstrijdID_regel".$n} = $tespelenwedstrijden['wedstrijdID']
            ${"thuisploeg_regel".$n} = $tespelenwedstrijden['thuisclub']
            etc...
            $n += 1
            ;}
    ;}
        else if($X == 3){
        ...  
    ;}
        else if($X == 4){
        ...
    ;}

En hetzelfde voor gespeelde wedstrijden (Y).  


Mijn probleem is dat ik vast loop bij stap 4 na het gedeelte "else if($X == 2)".
Als ik de in de for-lus aangemaakte variabelen van regel 3 (bijvoorbeeld $wedstrijdID_regel3) en regel 4 (bijvoorbeeld $wedstrijdID_regel4) echo dan zijn ze steeds gelijk aan elkaar.

Kan iemand mij helpen?

(Misschien goed om te zeggen: als ik $wedstrijdID_regel3 en $wedstrijdID_regel4 echo krijg ik geen undefined variable error, dus de forloop wordt wel 2 keer doorlopen alleen lijkt ie dezelfde elementen uit de array te pakken)

Oh, ik besef me nu dat dit misschien niet de correcte plaats voor mijn vraag is...
Gewijzigd op 12/07/2015 12:55:33 door Jo Immanuel
 
PHP hulp

PHP hulp

29/04/2024 18:48:04
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2015 11:16:37
Quote Anchor link
Uhm, als je weet wanneer de wedstrijden gespeeld zijn of moeten worden (deze staan dus al in de database) kun je toch gewoon de huidige datum als uitgangspunt nemen en dan proberen maximaal 2 gespeelde wedstrijden en 2 te spelen wedstrijden op te halen (LIMIT 2)? De hoeveelheid resultaten die je afdrukt laat je afhangen van het aantal resultaten wat je hebt.

Volgens mij ben je in twee queries klaar?
 
Jo Immanuel

Jo Immanuel

12/07/2015 11:23:06
Quote Anchor link
Thomas van den Heuvel op 12/07/2015 11:16:37:
Uhm, als je weet wanneer de wedstrijden gespeeld zijn of moeten worden (deze staan dus al in de database) kun je toch gewoon de huidige datum als uitgangspunt nemen en dan proberen maximaal 2 gespeelde wedstrijden en 2 te spelen wedstrijden op te halen (LIMIT 2)? De hoeveelheid resultaten die je afdrukt laat je afhangen van het aantal resultaten wat je hebt.

Volgens mij ben je in twee queries klaar?


He Thomas,

Ja maar ik wil LIMIT nu juist niet gebruiken in mijn SQL-queries A en B. Ik wil alle wedstrijden van een bepaald seizoen ophalen met SQL en die informatie onderverdelen in 2 arrays, 1 voor gespeelde wedstrijden en 1 voor te spelen wedstrijden. Dan kan ik de informatie uit die arrays hergebruiken.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/07/2015 11:32:30
Quote Anchor link
Dat kan in 1 query.

Als je op een of andere manier weet dat een wedstrijd gespeeld is, zodat je het onderscheid kunt maken tussen reeds gespeelde en nog te spelen wedstrijden.

EDIT: misschien praat het wat makkelijker als je wat tabeldefinities en -data laat zien.
Gewijzigd op 12/07/2015 11:34:07 door Thomas van den Heuvel
 
Jo Immanuel

Jo Immanuel

12/07/2015 12:31:48
Quote Anchor link
He Thomas,

Ik wil het in 2 queries.

De query van al gespeelde wedstrijden is veel zwaarder (0.0137 sec) dan de query voor de nog te spelen wedstrijden (0.0010 sec) omdat bij de gespeelde wedstrijden er ook de uitslag bij zit (en deze uitslag wordt weer in de query bepaald door het aantal gemaakte doelpunten van uit- en thuislcub in die wedstrijd op te tellen).

Dus ik maak 1 query voor te spelen wedstrijden (queryA), met datum > als yyyy-mm-dd .
Uit queryA komen (afhankelijk van de gekozen yyyy-mm-dd) de volgende gegevens:

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
$tespelenwedstrijdenquery = mysqli_query($hello, $queryA);

datum        competitie     wedstrijdID speelr     thuisclub         uitclub
2012-12-23     eredivisie     00160         18         FC Utrecht         afc Ajax
2013-01-20     eredivisie     00170         19         afc Ajax         Feyenoord
2013-01-27     eredivisie     00177         20         Vitesse         afc Ajax
2013-02-03     eredivisie     00186         21         VVV-Venlo         afc Ajax
2013-02-10     eredivisie     00195         22         afc Ajax         Roda JC
2013-02-17     eredivisie     00207         23         RKC Waalwijk    afc Ajax
2013-02-24     eredivisie     00216         24         afc Ajax         ADO Den Haa
2013-03-02     eredivisie     00220         25         FC Twente         afc Ajax
2013-03-10     eredivisie     00232         26         afc Ajax         PEC Zwolle
2013-03-17     eredivisie     00243         27         AZ                 afc Ajax
2013-03-31     eredivisie     00251         28         afc Ajax         N.E.C.
2013-04-07     eredivisie     00259         29         afc Ajax         Heracles
2013-04-14     eredivisie     00268         30         PSV             afc Ajax
2013-04-19     eredivisie     00271         31         afc Ajax         sc Heerenve
2013-04-27     eredivisie     00282         32         NAC Breda         afc Ajax
2013-05-05     eredivisie     00289         33         afc Ajax         Willem II
2013-05-12     eredivisie     00303         34         FC Groningen    afc Ajax


En ik maak 1 query voor de gespeelde wedstrijden (queryB), met datum BETWEEN yyyy-mm-dd AND yyyy-mm-dd .
Uit queryB komen (afhankelijk van de gekozen yyyy-mm-dd) de volgende gegevens:

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
$gespeeldewedstrijdenquery = mysqli_query($hello, $queryB);

datum         competitie     wedstrijdID speelr     thuisclub         uitclub         thuisscore     uitscore
2012-08-12     eredivisie     00009         1         afc Ajax         AZ                 2             2
2012-08-19     eredivisie     00018         2         N.E.C.             afc Ajax         1             6
2012-08-25     eredivisie     00023         3         afc Ajax         NAC Breda         5             0
2012-09-02     eredivisie     00036         4         sc Heerenveen     afc Ajax         2             2
2012-09-15     eredivisie     00037         5         afc Ajax         RKC Waalwijk    2             0
2012-09-23     eredivisie     00050         6         ADO Den Haag    afc Ajax         1             1
2012-09-29     eredivisie     00059         7         afc Ajax         FC Twente         1             0
2012-10-07     eredivisie     00068         8         afc Ajax         FC Utrecht         1             1
2012-10-20     eredivisie     00073         9         Heracles         afc Ajax         3             3
2012-10-28     eredivisie     00086         10         Feyenoord         afc Ajax         2             2
2012-11-03     eredivisie     00092         11         afc Ajax         Vitesse         0             2
2012-11-11     eredivisie     00107         12         PEC Zwolle         afc Ajax         2             4
2012-11-17     eredivisie     00112         13         afc Ajax         VVV-Venlo         2             0
2012-11-25     eredivisie     00122         14         Roda JC         afc Ajax         1             2
2012-12-01     eredivisie     00131         15         afc Ajax         PSV             3             1
2012-12-08     eredivisie     00139         16         afc Ajax         FC Groningen    2             0
2012-12-16     eredivisie     00153         17         Willem II         afc Ajax         2             4


Ik denk dat mijn aanpak helemaal niet verkeerd is, alleen loop ik vast bij Stap 4.

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
while ($tespelenwedstrijden = mysqli_fetch_array($tespelenwedstrijdenquery, MYSQLI_ASSOC)) {
    if($X == 1){  
    $datum_regel4 = $tespelenwedstrijden['datum']
        $competitie_regel4 = $tespelenwedstrijden['comeptitie']
        $wedstrijdID_regel4 = $tespelenwedstrijden['wedstrijdID']
        $thuisploeg_regel4 = $tespelenwedstrijden['thuisclub']
        etc...
        ;}
    else if($X == 2){  
        $n = 3;
        for ($m = 0; $m < 2; $m++) {
            ${"datum_regel".$n} = $tespelenwedstrijden['datum'];    
            ${"competitie_regel".$n} = $tespelenwedstrijden['competitie']
            ${"wedstrijdID_regel".$n} = $tespelenwedstrijden['wedstrijdID']
            ${"thuisploeg_regel".$n} = $tespelenwedstrijden['thuisclub']
            etc...
            $n += 1
        ;}
    ;}
        else if($X == 3){
        ...  
    ;}
        else if($X == 4){
        ...
    ;}
}


Volgens mij moet wat ik wil gewoon kunnen alleen doe ik blijkbaar iets verkeerd.
Gewijzigd op 12/07/2015 13:08:45 door Jo Immanuel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/07/2015 13:10:50
Quote Anchor link
Jo Immanuel op 12/07/2015 11:23:06:
Ja maar ik wil LIMIT nu juist niet gebruiken in mijn SQL-queries A en B. Ik wil alle wedstrijden van een bepaald seizoen ophalen met SQL en die informatie onderverdelen in 2 arrays, 1 voor gespeelde wedstrijden en 1 voor te spelen wedstrijden. Dan kan ik de informatie uit die arrays hergebruiken.

Thomas van den Heuvel op 12/07/2015 11:32:30:
Dat kan in 1 query.

Huh?
Honderden records uit de database halen terwijl er maar 4 getoond worden?

Als beide queries met een LIMIT 4 uitgevoerd worden heb je alle situaties afgevangen en het aantal opgevraagde records drastisch beperkt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$nogtespelen
= mysqli_fetch_all($tespelenwedstrijdenquery, MYSQLI_ASSOC);
mysqli_free_result($tespelenwedstrijdenquery);
$gespeeld = mysqli_fetch_all($gespeeldewedstrijdenquery, MYSQLI_ASSOC);
mysqli_free_result($gespeeldewedstrijdenquery);
$cntA = count($nogtespelen);
$cntB = count($gespeeld);
$offset = ($cntA <= 2) ? 4  - $cntA : 2;
array_splice($gespeeld, $offset);
$gespeeld = array_reverse($gespeeld);
$offset = ($cntB <= 2) ? 4  - $cntB : 2;
array_splice($nogtespelen, $offset);
?>
 
Jo Immanuel

Jo Immanuel

12/07/2015 13:19:57
Quote Anchor link
He Ger,

Het zijn alle wedstrijden van 1 club in 1 bepaald seizoen. Kom je uiteindelijk uit op max. 50. Eens, dat zijn misschien veel records om in een array te zetten, maar ik wil op dezelfde pagina ook alle resultaten (gespeelde en te spelen wedstrijden) laten zien. En dan zou ik de queries 2x moeten uitvoeren.
Daarom wil ik geen LIMIT gebruiken.

En met mijn aanpak zou het ook moeten kunnen toch?

Toevoeging op 12/07/2015 15:53:59:

Mijn specifieke probleem is dus dat dit niet werkt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
...

else if($X == 2){  
        $n = 3;
        for ($m = 0; $m < 2; $m++) {
            ${"datum_regel".$n} = $tespelenwedstrijden['datum'];    
            ${"competitie_regel".$n} = $tespelenwedstrijden['competitie'];
            ${"wedstrijdID_regel".$n} = $tespelenwedstrijden['wedstrijdID'];
            ${"thuisploeg_regel".$n} = $tespelenwedstrijden['thuisclub'];
            etc...
            $n += 1;
        }
    ;}


Het resultaat dat ik verwacht is dat de volgende variabelen voor de 2 eerstvolgende te spelen wedstrijden zijn aanmaakt:

$datum_regel3 & $datum_regel4
$competitie_regel3 & $competitie_regel4
$wedstrijdID_regel3 & $wedstrijdID_regel4
etc.

Nu worden de variabele wel aangemaakt, alleen is de vulling van de variabelen van regel 4 niet correct. Die hebben dezelfde waarden als die van regel 3 (de eerstkomende wedstrijd). Ze zouden gevuld moeten worden met de elementen van de wedstrijd daarna.

Dus blijkbaar doe ik iets verkeerd. Kan iemand mij vertellen wat?
Gewijzigd op 12/07/2015 17:57:13 door Jo Immanuel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

13/07/2015 12:14:35
Quote Anchor link
Ik denk dat je het jezelf te moeilijk maakt.
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
<?php
/* Zet de resultaten van beide queries om in array's */
$nogtespelen = mysqli_fetch_all($tespelenwedstrijdenquery, MYSQLI_ASSOC);
mysqli_free_result($tespelenwedstrijdenquery);
$gespeeld = mysqli_fetch_all($gespeeldewedstrijdenquery, MYSQLI_ASSOC);
mysqli_free_result($gespeeldewedstrijdenquery);


$cntA = count($gespeeld);
$cntB = count($nogtespelen);

/***********************************
* Gedeeltelijk programma/uitslagen *
***********************************/

// gespeelde wedstrijden

if($cntA > 0) {
    $offset = $cntA - 3 - (($cntB > 1) ? 0 : 2 - $cntB);
    if ($offset < 0) {
        $offset = 0;
    }

    for($i=$offset; $i < $cntA; $i++) {
        echo $gespeeld[$i]['datum']; // etc.
    }
}


//nog te spelen wedstijden
if($cntB > 0) {
    $max = 1 + (($cntA > 1) ? 0 : 2 - $cntA);
    if($max > $cntB - 1) {
        $max = $cntB - 1;
    }

    for($j = 0; $j <= $max; $j++) {
        echo $nogtespelen[$j]['datum']; // etc.
    }
}

?>
 
Jo Immanuel

Jo Immanuel

13/07/2015 18:37:59
Quote Anchor link
He Ger,

Bedankt voor je antwoord. Ik ben er inmiddels zelf ook uit. Ik was wat aan het worstelen met de for-loop.

Ik deed if(X == 1){for ..... } else if(X == 2){for ..... } else if(X == 3){for ..... } else if(X == 4){for ..... } en hetzelfde met if(Y == 1){for .....} etc. Dus in elke "if/else if" statement een for-loop (=8x). Veel te veel "for"-loopjes dus.

Ik heb nu 2 for-loops: 1 voor X en 1 voor Y. En daarna pas ik pas de if(X == 1){...} else if(X ==2) etc. en if(Y == 1){...} else if(Y ==2) etc. toe. En nu werkt het allemaal. En het ziet er nog redelijk lean uit allemaal.
 



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.