Page 1 of 2 12 Last
  1. #1
    Sick-Boy's Avatar
    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  

  2. #2

    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?
    Nietske
    no votes  

  3. #3
    Sick-Boy's Avatar
    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  

  4. #4
    d-zilla's Avatar
    Registered
    05/10/09
    Location
    Kruishoutem
    Posts
    278
    iTrader
    2 (75%)
    Mentioned
    0 Post(s)
    Toch gewoon een kwestie van ORDER BY ... DESC of ASC?
    no votes  

  5. #5
    Sick-Boy's Avatar
    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  

  6. #6
    metalleke's Avatar
    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  

  7. #7
    d-zilla's Avatar
    Registered
    05/10/09
    Location
    Kruishoutem
    Posts
    278
    iTrader
    2 (75%)
    Mentioned
    0 Post(s)
    bijvoorbeeld LIMIT 5 , 5
    dan zal die pas starten op de 5de record
    no votes  

  8. #8
    Sick-Boy's Avatar
    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  

  9. #9
    dJeez's Avatar
    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 alieno
    Pastafarian by choice
    no votes  

  10. #10
    metalleke's Avatar
    Registered
    23/10/03
    Location
    Oostende
    Posts
    2,782
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Quote Originally Posted by Sick-Boy View Post
    This quote is hidden because you are ignoring this member. Show
    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?
    Limit voor joins? Dat staat er toch helemaal niet?
    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  

  11. #11
    Sick-Boy's Avatar
    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  

  12. #12

    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.
    Nietske
    no votes  

  13. #13
    MiniJeffrey's Avatar
    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 vragen
    Let us pray for all the fools that be
    no votes  

  14. #14
    Sick-Boy's Avatar
    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  

  15. #15

    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.
    Nietske
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in