Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1263 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°84047
PIIBurner
Posté le 24-12-2001 à 10:39:12  profilanswer
 

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!

mood
Publicité
Posté le 24-12-2001 à 10:39:12  profilanswer
 

n°84049
Oreste
Posté le 24-12-2001 à 10:48:31  profilanswer
 

Tu as pensé a les datés ?

n°84050
PIIBurner
Posté le 24-12-2001 à 10:55:19  profilanswer
 

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!!!...

n°84054
Oreste
Posté le 24-12-2001 à 11:22:59  profilanswer
 

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

n°84055
PIIBurner
Posté le 24-12-2001 à 11:25:14  profilanswer
 

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...

n°84057
Bonhomme
Posté le 24-12-2001 à 11:32:02  profilanswer
 

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

n°84060
potiron
...
Posté le 24-12-2001 à 11:51:36  profilanswer
 

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

n°84062
PIIBurner
Posté le 24-12-2001 à 11:57:25  profilanswer
 

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.

n°84064
PIIBurner
Posté le 24-12-2001 à 12:18:04  profilanswer
 

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

n°84069
Bonhomme
Posté le 24-12-2001 à 13:50:15  profilanswer
 

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

mood
Publicité
Posté le 24-12-2001 à 13:50:15  profilanswer
 

n°84075
gizmo
Posté le 24-12-2001 à 14:24:28  profilanswer
 

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

n°84148
ethernal
Chercheur de vérité...
Posté le 25-12-2001 à 13:11:04  profilanswer
 

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.

n°84153
gizmo
Posté le 25-12-2001 à 14:05:09  profilanswer
 

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

n°84176
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 25-12-2001 à 15:56:24  profilanswer
 

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é

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
[SQL] Statement SQL pour compter les lignes d'une table[MySQL] Restauration SQL supérieur à 2 mégas
[SQL Server] explications pour un debutant plz !![PHP] Prob requête SQL... (débutant)
[PHP] Récupérer le poids d'un fichier image c possible ?[VB/ACCESS] Création de table
Pour les pros de SQL Server....[HTML/CSS] peut on gerer des class pour les balise tr et td d'un table
gros newbie en SQL 
Plus de sujets relatifs à : [SQL] Récupérer l'élément suivant dans une table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR