Requete SELECT
ar92
-
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+
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
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) :
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.
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.
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