SQL-query met @num werkt niet in andere PHPmyadmin
Ik heb een merkwaardig probleem. Ik ben mijn website aan het verhuizen van host en heb mijn database overgezet maar een query die ik bij mijn oude host gebruikte werkt nu ineens niet meer. Beide PHPmyadmin.
Het gaat over gebruik van nummering door middel van @num, waar ik hier eens hulp bij heb gekregen.
https://www.phphulp.nl/php/forum/topic/stand-maken-met-mysql/99084/
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT uitslag_naam, punten, niveau, rownum FROM (
SELECT uitslag_naam, punten, niveau, @num := IF(@id = uitslag_naam, @num +1, 1) rownum, @id := uitslag_naam FROM (
SELECT uitslag_naam, punten, niveau FROM uitslagen AS u JOIN kalender AS k ON k.kalender_id = u.uitslag_wedstrijd_id AND k.seizoen = u.uitslag_seizoen AND k.categorie = u.uitslag_categorie WHERE categorie IN ('ME') AND niveau IN ('C1') AND datum BETWEEN DATE_ADD('2017-05-18', INTERVAL 1 DAY) - INTERVAL 1 YEAR AND '2017-05-18' ORDER BY uitslag_naam, punten DESC
) t1
CROSS JOIN (SELECT @num:= 0, @id := 0) v1
) t2
WHERE rownum <= 5
SELECT uitslag_naam, punten, niveau, @num := IF(@id = uitslag_naam, @num +1, 1) rownum, @id := uitslag_naam FROM (
SELECT uitslag_naam, punten, niveau FROM uitslagen AS u JOIN kalender AS k ON k.kalender_id = u.uitslag_wedstrijd_id AND k.seizoen = u.uitslag_seizoen AND k.categorie = u.uitslag_categorie WHERE categorie IN ('ME') AND niveau IN ('C1') AND datum BETWEEN DATE_ADD('2017-05-18', INTERVAL 1 DAY) - INTERVAL 1 YEAR AND '2017-05-18' ORDER BY uitslag_naam, punten DESC
) t1
CROSS JOIN (SELECT @num:= 0, @id := 0) v1
) t2
WHERE rownum <= 5
De query sorteert de punten van iemand, nummert ze en neemt de vijf beste van iedereen. De code werkt bij mijn oude host perfect, maar bij de nieuwe ineens niet. Ik krijg allemaal 1'tjes terug bij de nummering, waardoor ik alle punten terugkrijg in plaats van de vijf beste van iedereen. Ik word er helemaal tureluurs van. Ik ben er wel achter gekomen dat als ik de JOIN eruit haal dat hij had dan wel doet, maar dan kan ik dus niet filteren zoals ik wil.
Maar hoe kan het dat het in de ene versie van PHPmyadmin (4.5.0.2) het wel doet en in een andere PHPmyadmin (4.6.6) niet?
Aan phpMyAdmin als databasetool zaak het vast niet liggen. Welke databaseservices en versies heb je op beiden?
Nou, ik ben eruit wat het probleem was dankzij de helpdesk. Het zat hem in ieder geval niet in de @num. Bij de oude host gebruikte MySQL, en de nieuwe MariaDB. In MariaDB wordt de volgorde in een subquery kennelijk niet meegenomen. Onderstaande query gaf de resultaten dus niet op volgorde weer.
Wat wel werkt is als je er een Limit aan toevoegd. Raar, maar het werkt. Als ik in mijn query een Limit toevoeg achter de Order werkt hij ook.
https://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/
Gewijzigd op 19/05/2017 16:30:52 door G Jansma