SQL-query met @num werkt niet in andere PHPmyadmin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G Jansma

G Jansma

18/05/2017 18:22:30
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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


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?
 
PHP hulp

PHP hulp

27/11/2024 04:15:26
 
- Ariën  -
Beheerder

- Ariën -

18/05/2017 18:50:25
Quote Anchor link
Aan phpMyAdmin als databasetool zaak het vast niet liggen. Welke databaseservices en versies heb je op beiden?
 
G Jansma

G Jansma

18/05/2017 18:55:46
Quote Anchor link
Edit:

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM (SELECT punten FROM table ORDER BY punten DESC) t1


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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM (SELECT punten FROM table ORDER BY punten DESC LIMIT 10000000000) t1


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
 



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.