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?
$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 <?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.
[size=xsmall]Toevoeging op 08/07/2015 09:10:49:[/size]
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...