Contexte
J'ai une page web qui affiche des bandes dessinées en ligne. Il y a actuellement 1622 pages. J'ai besoin d'afficher la page de bande dessinée actuelle (j'ai son ID), ainsi que les liens vers les premières, précédentes, suivantes et dernières pages. L'ordre est également complexe (il y a un long ORDER BY en raison de la conception de base de données particulière - des éléments hérités), donc je ne peux pas faire des choses comme "où ID = 1" non plus.
La question
Donc, la question est simple - je connais l'ID d'un enregistrement. Je fais une requête SELECT ... FROM ... WHERE ... ORDER BY ...
et je veux récupérer le premier enregistrement, le dernier enregistrement, l'enregistrement avec l'ID que je connais, et les enregistrements précédents et suivants celui avec l'ID connu.
La requête non filtrée renvoie plus de 1600 lignes, et il y a une nouvelle ligne chaque jour. La requête sera exécutée plusieurs fois par seconde (il y a un lectorat important). Quelle est la manière la plus efficace de procéder ? Y a-t-il quelque chose de mieux que la méthode naïve consistant à "obtenir toutes les lignes et filtrer ce dont j'ai besoin en code PHP" ? Notez que je sais que je peux mettre en cache le résultat côté PHP, mais je me demandais s'il y a une optimisation liée à MySQL disponible ici.
Ajout : Une solution consiste à faire plusieurs requêtes - une pour chaque valeur requise. Je devrais l'avoir mentionné et je pensais à quelque chose de plus élégant.