Bonjour.
J'ai quasiment le même problème, mais avec un fichier XML

(voir le forum XML).
Les solutions que j'ai trouvées :
1. La plus simple : en trois passes.
- Tu commences par faire un SELECT pour récupérer ta nouvelle. Tu stockes la date (disons dans
$datecourrante)
- Tu fais un
SELECT id_new FROM TABLE_NEWS where date_new < $datecourrante ORDER by date_new DESC LIMIT 1,1, qui va te retourner la dernière nouvelle avant la nouvelle affichée. Avec ça, tu peux constituer le lien "précédent".
- Pour la nouvelle suivante, c'est à peu près la même chose...
Inconvénient : trois requêtes, ça peut vite faire lourd (surtout si tu n'utilises pas de cache)
2. En modifiant la table :
- Tu rajoutes les champs prec_new et next_new qui contiendront l'id des nouvelles précédente et suivante.
- A la création d'une nouvelle, tu vas chercher la nouvelle précédente pour mettre son id dans prec_new, et tu fais un UPDATE dessus pour renseigner le champ next_new de la nouvelle précédente (faisable en PHP ou avec des triggers suivant la BDD).
Ce n'est pas très élégant, pas du tout normalisé, ça peut être lourd à gérer (surtout si tu permets de faire des news qui ne paraîtront pas tout de suite, tu peux te retrouver à retravailler toute la table à chaque fois).
Mais c'est un traitement lourd qui ne se fait qu'à la création (éventuellement aussi à la modification) d'une nouvelle. Pour la consultation tu te limites à une seule requête...
3. En pariant sur la régularité des nouvelles :
Si le rythme de parution des nouvelles est à peu près régulier, tu peux faire un SELECT en limitant les dates, histoire d'être à peu près sûr de récupérer les nouvelles précédente et suivante.
Exemple : Une nouvelle par semaine =>
- Tu calcules $datemin = ($datecourante - 1 mois) et $datemax = ($datecourante + 1 mois)
Tu fais un
SELECT * FROM TABLE_NEWS where date_new between $datemin AND $datemax.
Ca
devrait te retourner un nombre raisonnable de nouvelles,
et inclure les nouvelles précédente et suivante.
Problèmes : il faut avoir un rythme de parution à peu près régulier, et ce n'est pas garanti...
Personnellement, je choisirais la dénormalisation, en rajoutant les champs nouvelle_prec et nouvelle_suiv dans ma table...