[mysql/php] positie bepalen in op datum gesorteerde lijst

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-07 20:53

BetuweKees

Flipje uit Tiel

Topicstarter
hi,

Ik heb een lijst met nieuwsberichten die te identificeren zijn op basis van de datum die bij het bericht is toegevoegd. Deze data hoeven niet per se chronologisch te zijn; een bericht dat later aan de database is toegevoegd kan dus nog steeds eerder plaats hebben gevonden dan het bericht ervoor.

Wat ik wil is bij ieder bericht de naam weer geven van het bericht dat voor en na het huidige bericht komt, en eventueel ditzelfde doen met het allereerste en allerlaatste bericht.

Wat ik kan doen is alle berichten uitlezen, deze in een array oid laden en met behulp van php de positie van het huidige bericht binnen deze array bepalen, en uitzoeken wat de gegevens van het eerste/vorige/volgende/laatste bericht zijn. Naast het feit dat dit resources gaat vreten, is dit is mi ook nog eens een vrij ranzige oplossing.
Aangezien ik er nogal van houd bepaalde dingen netjes aan te pakken (en wellicht onderweg ook nog eens wat bij te leren ;)) vraag ik mij af of dit niet netter kan. Zou er bijvoorbeeld een manier zijn om ditzelfde (op een nettere manier) met een aantal mysql queries te bereiken? Of zijn er andere manier om dit soort dingen handiger aan te pakken?
Indien er gebruik gemaakt zou worden van een simpeler systeem met index nummers zou eea eenvoudig op te lossen zijn, maar aangezien ik nu met verschillende datums moet werken wordt het net een stukje complexer..

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je zal dan eerst een record moeten zoeken dat vóór de datum lag die je zoekt:
code:
1
2
3
4
5
SELECT datum
FROM tabel
WHERE datum < $datumgezocht
ORDER BY datum DESC
LIMIT 1

En daarna kun je 3 rijen ophalen die je nodig hebt:
code:
1
2
3
4
5
SELECT datum
FROM tabel
WHERE datum >= $datumgevondeninvorigequery
ORDER BY datum ASC
LIMIT 3

Als je een nieuwe versie van MySQL hebt, dan zou dit eventueel in één query met een subquery kunnen. :)

[ Voor 3% gewijzigd door NMe op 21-04-2005 00:24 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-07 20:53

BetuweKees

Flipje uit Tiel

Topicstarter
slim slim.. mille grazie :)

heb je wellicht ook nog een dergelijke truc voor het eerste en laatste record?

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Even met order by asc/desc spelen, en limit 1 nemen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 29-05 01:29
hmm

ik zelf zou over het algemeen de hoeveelheid data limiten die ik op zou halen (laatste 10 berichten bijv.)
Deze gegevens in een array stoppen (de sortering op datum alvast door mysql laten doen) en dan kan je met gemak door je array lopen: foreach $array as $key => $val { }

maar misschien heb ik je vraag dan niet helemaal goed begrepen....

(als je je resultaat set toch al gesorteerd aanlevert via mysql, kan je toch zo met array's en indexen werken?)