La méthode pour afficher les valeurs immédiatement supérieures / inférieures en seulement deux requêtes
Pour
améliorer la navigation et le référencement des articles de mon blog, j'ai décidé d'ajouter à la fin de chaque article, un lien vers un article de la même
catégorie. Mon choix a été de prendre l'article de la même catégorie écrit juste avant et celui écrit juste après, s'il existe.
Toutes les entrées de mon blog étant stockées dans une base mysql, il me suffisait d'effectuer les bonnes requêtes pour sélectionner les
articles précédents / suivants.
Pour éviter de faire plusieurs requêtes ou deux while imbriqués, j'ai du trouver une solution simple en SQL. La solution se passe avec
les sélécteurs < et >.
Ce court tutorial présente la
source PHP que j'utilise avec ses commentaires.
Le problème et les contraintes
Pour trouver les entrées immédiatement suivantes et précédentes, j'aurai pu effectuer une requête qui trie mes articles par date ASC, puis avec un
(while $var = mysql_fetch_array($query-sql)){} puis vérifier si on trouve l'article correspondant et ensuite continuer une fois pour sélectionner l'article suivant.
Pour récupérer l'entrée précédente, il suffisait de faire la même manipulation mais en triant par date DESC. Cette methode est plutôt
coûteuse en ressources pour
uniquement récupérer l'entrée suivante, même si ma base de donnée n'est pas énorme.
De plus, le code serait assez complexe pour une opération aussi simple.
Ci-dessous, la solution en quelques lignes seulement.
La solution avec les sélecteurs SQL < / >
Tout d'abord, il vous faut l'id de l'enregistrement sur lequel on va chercher les valeurs adjacentes. Pour mon exemple, ce n'est pas un id mais une date ici ($date).
Pour sélectionner l'enregistrement suivant et précedent, effectuez ces requêtes :
$enregSuivant = mysql_query("SELECT * FROM `nom-table` WHERE `date` > '".$date."' ORDER BY `date` ASC LIMIT 0, 1");
$enregPrec = mysql_query("SELECT * FROM `nom-table` WHERE `date` < '".$date."' ORDER BY `date` DESC LIMIT 0, 1");
$dataSuiv = mysql_fetch_array($enregSuivant);
$dataPrec = mysql_fetch_array($enregPrec);
Les données des enregistrements précédents et suivants sont maintenant contenus dans les variables $dataSuiv et $dataPrec.
N'oubliez pas de
vérifier l'existence des entrées avant de les afficher.
Les propositions d'articles ci-dessous sont affichées avec ce script PHP / MySql.