Requete SELECT

ar92 -  
 ar92 -
Bonjour,

J'ai une table dont la cle primaire est un id auto incrément.
Dans cette table je stocke des numéros et des description.

J'arrive par exemple a reperer ce qui m'interesse avec une requete. Par exemple : affiche moi les numéros dont la description contient le mot clef "capitaine".

J'obtiens donc : 54, 1258586, 'capitaine'.

Ce qui va m'interesser, ce sera de récupérer le tuple juste avant, et juste après, et tout afficher sur la même ligne :

54, 1258586, 'caiptaine', 007,001.


Est ce possible ?

Merci !
A+

1 réponse

funnycat Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   65
 
Bonjour.
Est-ce que vous faites une recherche via l'identifiant de la clé primaire ?

Dans le cas où c'est le cas ET qu'il n'y a jamais de "trou" dans l'incrémentation, la solution la plus rapide consisterais à faire un SELECT avec un filtre id = 7 OR id= (7-1) OR id = (7+1).
Mais il faut bien l'avouer, cette solution n'est vraiment pas propre. Si vous avez des trous dans l'incrémentation, vous n'obtiendrez pas ce que vous cherchez.

Une idée composée de 2 sous-requêtes (mais pas excellent en terme de performance) :
SELECT id, col1, col2
FROM table
WHERE id = 7
OR id = ( 
    SELECT id
    FROM table
    WHERE id < 7
    LIMIT 0, 1
     )
OR id = ( 
    SELECT id
    FROM table
    WHERE id > 7
    LIMIT 0, 1
     )


A tester ...
Il faudrait aussi vérifier si les performance sont correcte, selon la taille de votre base et l'utilisation que vous en faite. Car il y a surement d'autres possibilités pour obtenir un résultat équivalent.
0
ar92
 
Bonjour,

Tout d'abord merci beaucoup pour la réponse.

Pour préciser, je veux afficher le tout dans un controle DataGridView. Je travaille donc sous VS.NET avec SQLSERVER.

Non je ne fait pas de recherche via l'identifiant de la clé primaire....

J'obtiens la clé primaire car je demande à l'afficher via un mot clef (Like '%capitaine%' par exemple).

La seule solution que j'ai trouvée pour l'instant se décompose en deux requêtes.

La premiere est d'afficher les infos 54, 1258586, 'capitaine'.

La deuxième est d'aller récuperer les infos via la clé primaire récupérée incrémentée ou décrémentée...

Ce n'est vraiment pas propre mais c'est la seule chose que j'ai trouvée.

Cordialement
0