SQL-query met @num werkt niet in andere PHPmyadmin

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full Stack Developer Industriële Automatiseri

Raster levert slimme industriële automatiseringsoplossingen aan nationale en internationale opdrachtgevers voor wie procesveiligheid van groot belang is. We zijn sterk in spraakmakende one-off projecten in de productie- en procesautomatisering waarbij extreme engineering een terugkerend thema is. Daarbij kun je denken aan: Het veilig en duurzaam ontwerpen, plaatsen én weer opruimen van olie- en gas- productieplatformen De transformatie van de olie- en gasmarkt naar windenergie op zee Het oplossen van lokale parkeerproblematiek in dichtbevolkte steden Het cyber secure maken van kritische industriële productieomgevingen Het op afstand veilig produceren door onbemande platformen op de Noordzee Het succesvol lanceren van satellieten in de

Bekijk vacature »

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

03/12/2021 14:54:07
 
- 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.