Thread: ORDER BY vs LIMIT
-
28-09-2010, 12:46 #1Approved 9liver
- Registered
- 20/01/07
- Location
- Mechelen
- Posts
- 942
- iTrader
- 28 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/20
ORDER BY vs LIMIT
Ik ben een website aan het maken van een voetbalclub en ik had graag resultaten en volgende wedstrijden weergegeven op de voorpagina.
Ik bekijk voor welke wedstrijden al een score werd ingegeven en sorteer ze op datum, de 4 laatste resultaten moeten worden weergegeven.
Nu is het probleem dat ik ofwel de eerste 4 resultaten krijg in de juiste volgorde ofwel de laatste 4 resultaten in omgekeerde volgorde. Ik wil uiteraard dat de datums aansluiten bij de weergave van de volgende wedstrijden.
Subquery werken niet omdat mijn host niet ondersteunt dat LIMIT in een subquery wordt gebruikt.
Any thoughts?- Vice-President of Awesome -no votes
-
-
28-09-2010, 12:51 #2Member
- Registered
- 25/08/05
- Posts
- 68
- iTrader
- 0
- Mentioned
- 0 Post(s)
waarom draai niet gewoon de volgorde van de resultaten van je query om in je code?
Nietskeno votes
-
28-09-2010, 13:12 #3Approved 9liver
- Registered
- 20/01/07
- Location
- Mechelen
- Posts
- 942
- iTrader
- 28 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/20
Ik wil graag een oplossing in SQL.
Door arrays om te draaien is het probleem omzeilt, niet opgelost
- Vice-President of Awesome -no votes
-
28-09-2010, 14:01 #4
Toch gewoon een kwestie van ORDER BY ... DESC of ASC?
no votes
-
28-09-2010, 14:30 #5Approved 9liver
- Registered
- 20/01/07
- Location
- Mechelen
- Posts
- 942
- iTrader
- 28 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/20
Dat bedoel ik met "ofwel de eerste 4 resultaten krijg in de juiste volgorde ofwel de laatste 4 resultaten in omgekeerde volgorde".
Stel dat ik 5 resultaten heb (1 het oudste en 5 het nieuwste) en ik wil er 4 weergeven dan krijg ik:
ASC: 1, 2, 3,4
DESC: 5,4,3,2
En ik wil, om aan te sluiten bij de wedstrijden die komen, deze volgorde:
2,3,4,5
Ik weet dat je dit kan omzeilen met COUNT() of zoiets, maar ik vraag mij af of er een SQL oplossing bestaat.- Vice-President of Awesome -no votes
-
28-09-2010, 19:37 #6Approved 9liver
- Registered
- 23/10/03
- Location
- Oostende
- Posts
- 2,782
- iTrader
- 3 (100%)
- Mentioned
- 0 Post(s)
Je moet gebruik maken van een join statement. Maak een subquery die gebruik maakt van de limit clause en join deze met de orginele tabel (of welke ge nog nodig hebt).
Last edited by metalleke; 28-09-2010 at 21:00.
Notch: But let’s get one thing clear: people who think “free to play” is a great future are mostly game developers, not game players.no votes
-
28-09-2010, 20:10 #7
bijvoorbeeld LIMIT 5 , 5
dan zal die pas starten op de 5de recordno votes
-
28-09-2010, 20:10 #8Approved 9liver
- Registered
- 20/01/07
- Location
- Mechelen
- Posts
- 942
- iTrader
- 28 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/20
Een limit voor joins, daar heb ik nog nooit van gehoord, misschien snap ik niet goed wat je bedoelt. En een subquery met limit gaat niet omdat mijn mysql versie dat niet ondersteunt.
@d-zilla: en hoe kom ik aan die 5?- Vice-President of Awesome -no votes
-
28-09-2010, 20:19 #9Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
Als je nu al eens zou beginnen met de structuur van je tabel(len) te vermelden, want misschien zijn er nog andere opties dan sorteren op ID hé. Welke versie van mysql gebruik je overigens? Metalleke heeft overigens alvast aangegeven hoe je het mogelijk kan oplossen : met een join waar je wèl gebruik kan maken van de limit clausule (cfr. http://chamnapchhorn.blogspot.com/20...se-within.html).
Last edited by dJeez; 28-09-2010 at 21:14.
PSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes
-
28-09-2010, 20:56 #10no votes
-
28-09-2010, 22:27 #11Approved 9liver
- Registered
- 20/01/07
- Location
- Mechelen
- Posts
- 942
- iTrader
- 28 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/20
Dan had ik het verkeerd begrepen

Zo is het in ieder geval opgelost, bedankt!- Vice-President of Awesome -no votes
-
28-09-2010, 22:58 #12Member
- Registered
- 25/08/05
- Posts
- 68
- iTrader
- 0
- Mentioned
- 0 Post(s)
als ge het zo doet, gaat uw DBA daar niet zo gelukkig mee zijn. SQL is niet gemaakt om dergelijke vragen op te lossen, en je optimizer gaat niet zien wat je precies wenst te doen; je doet twee table scans waar je normaal er maar eentje nodig hebt...
Het is wel degelijk in je code dat je dat normaal moet oplossen.Nietskeno votes
-
28-09-2010, 23:38 #13Approved 9liver
- Registered
- 24/10/07
- Location
- Harelbeke
- Posts
- 7,758
- iTrader
- 0
- Mentioned
- 2 Post(s)
- Reputation
- 1/446
zoals wonko zegt, zou ik het idd in de code oplossen:
php:
select de eerste zes entries
gooi de eerste entry weg door fetch_arrey
doe een while(fecth_array) om de vijf andere entries op te vragenLet us pray for all the fools that beno votes
-
29-09-2010, 00:53 #14Approved 9liver
- Registered
- 20/01/07
- Location
- Mechelen
- Posts
- 942
- iTrader
- 28 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 7/20
Misschien niet zo'n goed idee voor als het om veel entries gaat.
In php kan ik het oplossen, ik wou gewoon een SQL oplossing vinden.- Vice-President of Awesome -no votes
-
29-09-2010, 09:39 #15Member
- Registered
- 25/08/05
- Posts
- 68
- iTrader
- 0
- Mentioned
- 0 Post(s)
SQL dient daar niet voor, om het antwoord exact te geven hoe jij het wil. Het laat je toe om een relationele DB te ondervragen en een resultset terug te krijgen. Die resultset is niet altijd "klaar voor gebruik".
De manier waarop je het "kan" doen in de voorbeelden gegeven (subselect met een distinct gebruiken in een IN() statement, of een join) is zo ongelooflijk fout dat ik je je C4 zou geven mocht je bij mij werken en dergelijke dingen uithalen.Nietskeno votes

