Stand competitie - extra column met positie (getal)

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

08/07/2015 07:08:42
Quote Anchor link
Beste forumleden,

Doel: laten zien van een klein deel van de ranglijst van een competitie. Dus als een club 8e staat dan wil ik het gedeelte van de stand laten zien van 6 t/m 10 (dus 5 clubs met de club in kwestie in het midden).

Mijn aanpak is om dit in een aantal stappen te doen. Stap 1 daarvan is om de positie op de stand te bepalen van de club in kwestie. Dit getal daarna op te slaan in een variabele X en daarna de stand query nog een keer draaien maar nu gebruik maken van limit (LIMIT X,5). (ik weet dat bij de bovenste en onderste 2 posities dit niet correct is , maar dat is voor latere zorg...)

Maar nu heb ik problemen met de functie ROW_NUMBER(). Als ik in mijn phpmyadmin (versie 5.5.27) deze functie gebruik wordt ik er steeds uit gegooid.

Nu vond ik een andere aanpak door "SET @rowcount = 0;" te gebruiken in combinatie met "@rowcount := @rowcount + 1".

Dit werkt perfect in phpmyadmin, maar zodra ik deze gebruik in mijn site werkt dit opeens niet meer. kan iemand mij helpen?

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
$positie = '';
$sql_club_5 =  "SET @rowcount = 0;
                SELECT sc.position
                FROM (
                SELECT
                @rowcount := @rowcount + 1 AS position, rc.clubID, rc.clubnaam, rc.gespeeld, rc.doelp_voor, rc.doelp_tegen, rc.punt_totaal
                FROM
                (SELECT
                    tbl_clubs.clubID,
                    tbl_clubs.clubnaam,
                    SUM(IF(tbl_clubs.clubID = u.thuisclubID,
                            CASE
                                WHEN u.thuisscore > u.uitscore THEN 3
                                WHEN u.thuisscore = u.uitscore THEN 1
                                ELSE 0 END
                        ,
                            CASE
                                WHEN u.thuisscore < u.uitscore THEN 3
                                WHEN u.thuisscore = u.uitscore THEN 1
                                ELSE 0 END
                        )) punt_totaal,
                    COUNT(u.wedstrijdID) gespeeld,
                    SUM(IF(tbl_clubs.clubID = u.thuisclubID,
                            IF(u.thuisscore > u.uitscore, 1, 0),
                            IF(u.thuisscore < u.uitscore, 1, 0)
                        )) gewonnen,
                    SUM(IF(tbl_clubs.clubID = u.thuisclubID,
                            IF(u.thuisscore < u.uitscore, 1, 0),
                            IF(u.thuisscore > u.uitscore, 1, 0)
                        )) verloren,
                    SUM(IF(u.thuisscore = u.uitscore, 1, 0)) gelijk,
                    SUM(IF(tbl_clubs.clubID = u.thuisclubID, thuisscore, uitscore)) doelp_voor,
                    SUM(IF(tbl_clubs.clubID = u.thuisclubID, uitscore, thuisscore)) doelp_tegen,
                    SUM(IF(tbl_clubs.clubID = u.thuisclubID, thuisscore, uitscore)) -
                        SUM(IF(tbl_clubs.clubID = u.thuisclubID, uitscore, thuisscore)) doelsaldo
                FROM
                    tbl_clubs
                LEFT JOIN
                    (SELECT
                        wedstrijdID,
                        w.thuisclubID,
                        w.uitclubID,
                        COUNT(IF(d.thuisclub_uitclub = 'thuis', 1, NULL)) thuisscore,
                        COUNT(IF(d.thuisclub_uitclub = 'uit', 1, NULL)) uitscore
                
                    FROM
                        tbl_wedstrijden w
                    LEFT JOIN
                        tbl_doelpunten d
                        USING (wedstrijdID)
                    WHERE w.datumwedstrijd BETWEEN '2012-08-09' AND '2012-08-20'
                    GROUP BY wedstrijdID, w.thuisclubID, w.uitclubID
                    ) u
                    ON tbl_clubs.clubID = u.thuisclubID OR tbl_clubs.clubID = u.uitclubID
                GROUP BY tbl_clubs.clubID, tbl_clubs.clubnaam
                ORDER BY punt_totaal DESC, gespeeld, doelsaldo DESC, doelp_voor DESC)
                AS rc) sc
                WHERE sc.clubID = '$clubID'";
                
    $posi = mysqli_query($hello, $sql_club_5);
    if(mysqli_num_rows($posi) > 0){
    $row = mysqli_fetch_row($posi);
    $positie = $row[0];

        
    }


(Bovenstaande query met dank aan forumlid Ger)

En daarna echo ik deze in mijn site met behulp van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $positie; ?>
(gewoon om te kijken of dit werkt). In phpmyadmin krijg ik als ik de query draai het getal 8 eruit (de stand op de ranglijst). Op mijn site werkt dit niet. Kan iemand mijn helpen?

PS: het ligt niet aan de variabale '$clubID'.. Want deze werkt wel bij andere queries op dezelfde pagina.

Toevoeging op 08/07/2015 09:10:49:

Zou het ermee te maken kunnen hebben dat de mysql_query niet 2 statements tegelijk aan kan? Zo ja, hoe los ik dit probleem op?

Het lijkt me toch niet echt rocketscience of een heel uitzonderlijke wens die ik heb...
Gewijzigd op 08/07/2015 07:18:51 door Jo Immanuel
 
PHP hulp

PHP hulp

28/03/2024 17:36:56
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/07/2015 09:25:40
Quote Anchor link
Je kan inderdaad met mysqli_query maar één SQL statement uitvoeren.
Je kan met mysqli_multi_query meerdere query's tegelijk uitvoeren, maar dan moet je ook weer de diverse resultaten aflopen.

Tweede optie is de toekenning van de variable als losse query uit te voeren.

Derde optie is om die toekenning via een cross join mee te nemen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
......
AS rc CROSS JOIN (SELECT @rowcount := 0) var) sc
......
 
Jo Immanuel

Jo Immanuel

08/07/2015 09:43:50
Quote Anchor link
He Ger!

Ik had al de stille hoop jou hier te treffen. En die hoop was gerechtvaardigd. Ik heb voor optie 3 gekozen en het werkt! Wederom heel erg bedankt.

Zou ik je nog willen vragen: gevoelsmatig is mijn aanpak niet perfect. Ik draai nu 2 keer dezelfde stand-query. Zou dit niet efficiënter kunnen?
 
Jeroen Jansen

Jeroen Jansen

08/07/2015 09:47:50
Quote Anchor link
Jo,

ik zou het WHERE stukje uit de query laten en gewoon de gehele stand in een keer ophalen en in een array wegzetten. Deze array kun je dan doorlopen om te bepalen op welke positie de club staat. Hierna kun je de array nogmaals doorlopen en dan de rijen weergeven die je wilt hebben op basis van de positie van de club. Ik denk dat het dan wat sneller gaat dan wanneer je de query twee keer uitvoert.
 
Jo Immanuel

Jo Immanuel

08/07/2015 09:58:58
Quote Anchor link
He Jeroen,

Nou, dat was dus het antwoord op mijn vervolgvraag.

Resume:
1. stand query zonder LIMIT
2. resultaat in array zetten
3. array doorlopen om rij van clubID te zoeken
4. met die informatie de array doorlopen en gewenste 5 clubs weergeven.

Dank!

Toevoeging op 08/07/2015 15:02:08:

Nu loop ik weer vast.

Het lukt me niet om uit de associative array de waarde van "position" te krijgen die hoort bij een $clubnaam.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$clubnaam = "FC Utrecht";
$sql_club_5 = ".....";
$standquery = mysqli_query($hello, $sql_club_5);
    while ($stand = mysqli_fetch_array($standquery, MYSQLI_ASSOC)) {
    $stand1 = $stand;
}

Als ik dan als volgt echo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "{$stand1['position']}|{$stand1['clubnaam']}|{$stand1['gespeeld']}|{$stand1['doelp_voor']}|{$stand1['doelp_tegen']}|{$stand1['punt_totaal']}|";

Dan komt er heel mooi een rij met de volgende gegevens:

1|FC Twente|2|5|1|6|2|afc Ajax|2|8|3|4|3|AZ|2|5|3|4|4|RKC Waalwijk|2|5|4|4|5|Vitesse|2|3|2|4|6|Feyenoord|2|2|1|4|7|PSV|2|7|3|3|8|FC Utrecht|2|3|2|3|9|N.E.C.|2|3|6|3|10|ADO Den Haag|2|4|4|2|11|Willem II|2|2|2|2|12|NAC Breda|2|1|2|1|13|PEC Zwolle|2|1|2|1|14|Heracles|2|2|4|1|15|VVV-Venlo|2|2|4|1|16|sc Heerenveen|2|1|3|1|17|FC Groningen|2|2|5|1|18|Roda JC|2|1|6|1

Maar nu wil ik dus deze array doorzoeken naar een regel met clubnaam en dat ik de waarde van de positie ("position") op de stand (in dit geval dus 8) terug krijg. En dat lukt me niet.
Gewijzigd op 08/07/2015 15:06:52 door Jo Immanuel
 
- SanThe -

- SanThe -

08/07/2015 15:06:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if($clubnaam == $stand1['clubnaam'])  
   echo $stand1['position'];
?>
 
Jo Immanuel

Jo Immanuel

08/07/2015 15:08:55
Quote Anchor link
ok, thanx!
 



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.