[SQL] Récupérer l'élément suivant dans une table

Récupérer l'élément suivant dans une table [SQL] - Programmation

Marsh Posté le 24-12-2001 à 10:39:12    

Bonjour,
 
J'explique le problème.
J'ai une table contenant des records indexés, avec un id incrémenté automatiquement. A partir de n'importe quel record je voudrais pouvoir récupérer les records précédents et suivants.
 
Je ne peux pas me servir de l'id car si un record a été inséré puis effacé, les id ne sont plus continus (en clairs, je peux avoir les records avec les id 1, 4 et 12 qui se suivent...)
 
Quelle est la requette SQL (ou autre méthode) permettant de contourner ce problème...
 
Par ailleurs, si certains d'entre vous ont des bonnes URL pour des sites SQL, je susi preneur. J'ai trouvé pas aml de sites, mais jamais rien de transcendant.
 
Merci d'avance et joyeux Noël!

Reply

Marsh Posté le 24-12-2001 à 10:39:12   

Reply

Marsh Posté le 24-12-2001 à 10:48:31    

Tu as pensé a les datés ?

Reply

Marsh Posté le 24-12-2001 à 10:55:19    

Bah, la date ne résout pas le problème...
 
Le coeur de la chose, c'est qu'à partir d'un record donné, j'ai besoin de retrouver celui qui le précède et celui qui le suit, sans présumer des valeurs qu'ils peuvent contenir!!! C'est là tout le problème!!!...

Reply

Marsh Posté le 24-12-2001 à 11:22:59    

Regarde ici tu trouveras peut etre ton bonheur  
 
http://www.multimania.com/sqlpro/

Reply

Marsh Posté le 24-12-2001 à 11:25:14    

Oki merci. Pour l'instant je suis en train de le faire en gérant un index de position et en utilisant la commande SQL "LIMIT".
 
L'index de position me permet de connaître l'endroit où je suis dans la base, sans présumer de l'index, et avec LIMIT, je récupère l'id du champ suivant. C'est un peu relou pour gérer l'index, mais bon, ça le fait à priori...

Reply

Marsh Posté le 24-12-2001 à 11:32:02    

PIIBurner a écrit a écrit :

Bonjour,
 
J'explique le problème.
J'ai une table contenant des records indexés, avec un id incrémenté automatiquement. A partir de n'importe quel record je voudrais pouvoir récupérer les records précédents et suivants.
 
Je ne peux pas me servir de l'id car si un record a été inséré puis effacé, les id ne sont plus continus (en clairs, je peux avoir les records avec les id 1, 4 et 12 qui se suivent...)
 
Quelle est la requette SQL (ou autre méthode) permettant de contourner ce problème...
 
Par ailleurs, si certains d'entre vous ont des bonnes URL pour des sites SQL, je susi preneur. J'ai trouvé pas aml de sites, mais jamais rien de transcendant.
 
Merci d'avance et joyeux Noël!  




 
 
Tu peux un truc du genre
select max(ton_id) from ta_table where ton_id < id_de_ref
et
select min(ton_id) from ta_table where ton_id > id_de_ref
 
Avec la première requête tu as l'id précédent et avec la seconde
tu as l'id suivant
 
Voili voilo
 
Bon Noël à tous
 
Bonhomme

Reply

Marsh Posté le 24-12-2001 à 11:51:36    

soit tu te debrouilles pour garder un champ dont les valeurs seront connu et tanpis si tu dois le mettre a jour apres chaque effacement soit tu te sert de ce que tu as  :D et la c'est tout con :
 
SELECT id FROM table where id > idprecedent limit 1

Reply

Marsh Posté le 24-12-2001 à 11:57:25    

Oauip, c'est cool aussi ça!
 
Mon système avec gestion de position fonctionne bien. Ceci dit, cela m'oblige à passer 2 paramètres dans l'url, donc ta solution est meilleure, vu qu'il n'y a qu'un seul paramètre.

Reply

Marsh Posté le 24-12-2001 à 12:18:04    

Oki! J'ai remplacé mon système d'index, c'est nickel chrome!!! Merci à tous et joyeux Noël!!!

Reply

Marsh Posté le 24-12-2001 à 13:50:15    

potiron a écrit a écrit :

soit tu te debrouilles pour garder un champ dont les valeurs seront connu et tanpis si tu dois le mettre a jour apres chaque effacement soit tu te sert de ce que tu as  :D et la c'est tout con :
 
SELECT id FROM table where id > idprecedent limit 1  




 
Petite question c'est quoi ce "limit 1" c'est pour limiter à 1 le nombre de réponses ? Parce que j'ai pas trouvé cette identifiant dans le SQL User Guide de Sybase ?
 
Bonhomme

Reply

Marsh Posté le 24-12-2001 à 13:50:15   

Reply

Marsh Posté le 24-12-2001 à 14:24:28    

Limit se copose de 1 ou 2 parametres.
avec 1 parametre, il indique le nombre d'enregistrement a prendre.
avec 2 parametre, le 2eme indique toujours le nombre d'enregistrement a prendre, mais le premier indique la valeur du premier indice. Ce cas n'est valable qu'après une condition de classement ORDER BY

Reply

Marsh Posté le 25-12-2001 à 13:11:04    

gizmo a écrit a écrit :

Limit se copose de 1 ou 2 parametres.
avec 1 parametre, il indique le nombre d'enregistrement a prendre.
avec 2 parametre, le 2eme indique toujours le nombre d'enregistrement a prendre, mais le premier indique la valeur du premier indice. Ce cas n'est valable qu'après une condition de classement ORDER BY  




 
je ne suis pas tout à fait d'accord avec toi :
si tu as 2 valeurs (LIMIT 20,30), la première indique que la requête renverra les résutlats à partir de la 20ième ligne et qu'elle en prendra 30 --> du 20ième au 50ième
pas spécialement besoin d'order by.

Reply

Marsh Posté le 25-12-2001 à 14:05:09    

OK, mais dans ce cas, c'est parce que tu un un ordre implicite sur ton index primaire.

Reply

Marsh Posté le 25-12-2001 à 15:56:24    

potiron a écrit a écrit :

soit tu te debrouilles pour garder un champ dont les valeurs seront connu et tanpis si tu dois le mettre a jour apres chaque effacement soit tu te sert de ce que tu as  :D et la c'est tout con :
 
SELECT id FROM table where id > idprecedent limit 1  




heu ouais, mais fo pas oublier l'order by sinon ca peut te sortir une réponse erroné vu qu'il prends la première valeur > idprecedent qu'il trouve (et c'est pas forcement la plus petite :p)
 
Donc je propose :
 
SELECT id FROM table where id > idprecedent ORDER BY id ASC limit 1  
et pour le précédent :
 
SELECT id FROM table where id < idprecedent ORDER BY id DESC limit 1


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed