La façon de faire va dépendre du critère de recherche/tri des enregistrements.
Supposons que la table "utilisateurs" ait comme contenu :
Code:
id | nom
--------------------
1 | Durand
2 | Baron
3 | Dupin
Si au départ on veut seulement récupérer "Baron", on peut écrire :
Code:
SELECT id,nom FROM utilisateurs WHERE (id='2')
Si on veut récupérer "Durand" et "Baron" :
Code:
SELECT id,nom FROM utilisateurs WHERE (id='1') or (id='2') ORDER BY id
Si on veut récupérer "Baron" et "Dupin" :
Code:
SELECT id,nom FROM utilisateurs WHERE (id='2') or (id='3') ORDER BY id
Si on veut récupérer les 3 noms :
SELECT id,nom FROM utilisateurs WHERE (id='1') or (id='2') or (id='3') ORDER BY id
Ensuite, il faut voir d'où viennent les chiffres dans la partie "WHERE" de la requête.
Si cette requête est mise au point dans un programme PHP par exemple,
on aura vraisemblablement la valeur de clé à rechercher dans une variable.
Par exemple une variable "$id" va la contenir.
Du coup on peut écrire en PHP :
$cmd = "SELECT id,nom FROM utilisateurs WHERE (id='".($id-1)."' or (id='".$id."') or (id='".($id+1)."') ORDER BY id";
Si la variable "$id" vaut 2, cela donnera comme requête :
SELECT id,nom FROM utilisateurs WHERE (id='1') or (id='2') or (id='3') ORDER BY id
Si la variable "$id" vaut 17, cela donnera comme requête :
SELECT id,nom FROM utilisateurs WHERE (id='16') or (id='17') or (id='18') ORDER BY id
etc.
Attention à un "détail" : cette façon de faire suppose qu'il n'y ait pas de "trou"
dans la colonne "id", autrement pas pas de "1,2,6,9,13" mais toujours "1,2,3,4,5,6" etc.
Autre subtilité : bien gérer les bornes, c'est-à-dire lorsque l'enregistrement courant
est le premier de la table ou le dernier de la table, il n'y aura pas d'enregistrement
précédent ou d'enregistrement suivant respectivement.