Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] Laatste 2 records selecteren

Pagina: 1
Acties:
  • 360 views sinds 30-01-2008
  • Reageer

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Ik heb een SQL probleem dat vrij eenvoudig klinkt, maar waar ik de oplossing niet voor kan vinden:

"Hoe selecteer ik de laatste twee records met een SQL query, terwijl ik oplopend sorteer ?"

Ik maak zegmaar een site in de vorm van een boek, en wil in de rechter kolom het laatste nieuwsitem hebben, en het één na laatste nieuwsbericht in de linker kolom.

Nu is dat natuurlijk op te lossen met een array_reverse() in PHP, maar ik zou het netter vinden als dat met een SQL query kon.

Ik heb getracht om dit met een COUNT op te lossen, in de vorm van zoiets:

SQL:
1
SELECT * FROM tabel ORDER BY id ASC LIMIT (COUNT(*)-2),2


Maar dat bood geen uitkomst.

Wie heeft er wel een idee hoe ik dit klaarspeel ?

Verwijderd

ORDER BY Id DESC LIMIT 2

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Nee, dan krijg ik ze dus precies verkeerd om. Dan selecteer je dus wel de laatste twee records, maar sorteer je ze aflopend in plaats van oplopend.

[ Voor 21% gewijzigd door mcdronkz op 25-12-2007 16:32 ]


  • Wortelsoep
  • Registratie: Juni 2001
  • Niet online
Dan heb je dus de verkeerde volgorde..
Wat bij mij werkt:
SQL:
1
SELECT * FROM (SELECT * FROM log ORDER BY id DESC LIMIT 2) AS subq ORDER BY id ASC;


Maar of het netter is dan een array_reverse in PHP betwijfel ik..

[ Voor 1% gewijzigd door Wortelsoep op 25-12-2007 16:42 . Reden: onnodige LIMIT weg ]


  • Noel
  • Registratie: September 2001
  • Laatst online: 17-11 15:08
Dan toch maar in de applicatie de 2 omdraaien. Of je nu die paar cpu cycles verslindt aan de database query of aan de applicatie, maakt niet veel uit, me dunkt.

Server: Xeon X3430 21TB RAID 5 | Game: 5900X, 6900XT, dual FS2735 | Mobile: Lenovo X1 Carbon, Thinkpad T440s, Moto G7 Plus


  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Wilko schreef op dinsdag 25 december 2007 @ 16:33:
[...]


Dan heb je dus de verkeerde volgorde..
Wat bij mij werkt:
SQL:
1
SELECT * FROM (SELECT * FROM log ORDER BY id DESC LIMIT 2) AS subq ORDER BY id ASC LIMIT 0,2;


Maar of het netter is dan een array_reverse in PHP betwijfel ik..
Ja, daar heb je inderdaad wel een punt. Bij mij werkt het ook prima, maar buiten dat het feit dat je een subquery aanroept snap ik niet echt wat er gedaan wordt. Ik zal het eens nader bekijken in elk geval.

Voorlopig gebruik ik toch maar array_reverse denk ik :)

  • Wortelsoep
  • Registratie: Juni 2001
  • Niet online
Eerst DESC sorteren en de bovenste 2 records eruit halen (dat is de subquery) en vervolgens de boel omkeren met de rest. De laatste LIMIT 0,2 is eigenlijk helemaal niet nodig zie ik nu.

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Ah ja, dat is me nu volkomen duidelijk. Bedankt dat je me wat inzicht geeft hoe dit met SQL mogelijk zou zijn, toch ben ik het met je eens dat een oplossing in PHP mooier is :).

  • Wortelsoep
  • Registratie: Juni 2001
  • Niet online
Ik ben ook geen SQL-expert hoor ;) dus wellicht komt er morgen iemand met dé oplossing, maar dit is wat ik zo snel even kon bedenken.

Verwijderd

Ik zie niet in wat er mis mee is om 2 rijen te selecteren, en ze vervolgens even in de gewenste volgorde te zetten. Als je dat per sé in een SQL query moet doen, omdat je bijvoorbeeld alleen enkel SQL expressies kunt gebruiken, dan kan je prima even een subquery daarvoor nemen. En anders gewoon even de array omkeren. Dit laatste lijkt mij overigens minder zwaar dan een complexe SQL query ervan maken. Ik zie het probleem niet.

  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Nee dat is misschien wel waar, maar met je eerste reactie was ik niet erg geholpen, en had ik het idee dat je m'n vraag niet helemaal begreep :).
Pagina: 1