IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Firebird Discussion :

Position d'un enregistrement dans une table


Sujet :

Firebird

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 57
    Points : 40
    Points
    40
    Par défaut Position d'un enregistrement dans une table
    Bonjour;
    Y a t-il un moyen pour savoir la position d'un enregistrement dans une table?
    Je vous explique;
    J'ai une table ou il y a des milliers d'enregistrements et quand je valide une insertion il se positionne sur un autre enregistrement sachant que j'affiche juste un enregistrement à la foi
    (j'envoie une requete select pour affiche un seule enregistrement lors du navigation
    (Select .... ROWS '+Row1+' TO '+Row1)
    )
    Le probleme c'est qu'apres la validation j'ai besoin de savoir l'ordre de l'enregistrement sauvegardé dans la table pour pouvoir allimenter le variable Row1 avant d'envoyé la requette SELECT.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 106
    Points : 41 220
    Points
    41 220
    Billets dans le blog
    63
    Par défaut
    je comprends pas tout mais un SELECT .... WHERE sur une clé serait sans doute bien préférable (pour peu qu'il y ait un index) sinon il y a toujours DB_KEY

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 57
    Points : 40
    Points
    40
    Par défaut
    Bonsoir;
    "Select NOM,DATE_ From TABLE Order By DATE_ Rows x To x"
    Permet de selectionner:
    si x=1; le 1er enregistrement selon l'ordre de la date DATE_
    si x=2; le 2eme enregistrement selon l'ordre de la date DATE_
    si x=3; le 3eme enregistrement selon l'ordre de la date DATE_
    .....etc
    Supposant que x=1 et que j'ai ajouté un enregistrement avec une date inferieur à la date de x=3 et supperieur à la date de x=2;
    Dans ce cas le nouveau enregistrement sera à la place du 3eme et pour l'afficher j'ai besoin de son ordre selon la date DATE_(dans ce cas 3eme) avant d'envoyé la requete SELECT.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 106
    Points : 41 220
    Points
    41 220
    Billets dans le blog
    63
    Par défaut
    il y aurait une clé primaire (genre nombre autogénéré) cela ne poserait aucun soucis !
    "Y a t'il plusieurs fois la même date" ? serait la question qui me vient toute suite a l'esprit . Les informations venant au compte gouttes ("DATE_ est de Type Date ou DateTime ?" une description de la table aurait été bienvenue) il est difficile de faire une réponse correcte .


    Cependant DB_KEY reste "une solution" .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT FIRST 1 NOM,DATE_
    FROM TABLE  
    ORDER BY RDB$DB_KEY DESC
    devrait fournir le dernier enregistrement inséré si c'est bien ce qui est demandé , pas besoin de X

    J'en profite pour lancer une question aux lecteurs :
    Comment faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TABLE WHERE RDB$DB_KEY='00000080:00000001'
    c'est à dire sans passer par un paramètre ? bref indiquer que la constante est un CHARACTER SET OCTETS

  5. #5
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 715
    Points
    3 715

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 57
    Points : 40
    Points
    40
    Par défaut
    Merci Serge;
    y a une cle primaire auto-incrementé, mé ca sert a rien puisque y a des introu dans le generateur lors de la suppression.
    et en peut avoir la meme date plusieurs fois.
    la solution qui me vient a l'esprit maitenant c'est d'envoyé une requête select COUNT(DATE_) ORDER BY DATE_.
    Je vais l'essayer et je reviendrai.
    Merci.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 57
    Points : 40
    Points
    40
    Par défaut
    Ok ca marche meme si j'aime pas utilisé COUNT() question de performance.
    y a qlq un qui une autre idée?

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 106
    Points : 41 220
    Points
    41 220
    Billets dans le blog
    63
    Par défaut
    Ah oui , mais 2.5 , j'en suis toujours qu'a la 2.1

    @oumlike
    mais je ne vois toujours pas l'objectif , s'il s'agit d'obtenir l'enregistrement précédemment enregistré !
    Car si x est bien égal au numéro de l'enregistrement inséré 'dans l'ordre de Date_' alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select NOM,DATE_ From TABLE Order By DATE_ Rows x To x
    est bien le dernier enregistrement inséré

    ou alors quelque chose m'échappe

  9. #9
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2008
    Messages : 57
    Points : 40
    Points
    40
    Par défaut
    x n'est pas le numero de l'enregistrement inseré c'est le numero de l'enregistrement courant,le probleme c'est que je cherche le numero d'ordre de l'enregistrement inseré selon ORDER BY que j'ai dans la requête:
    j'ai les enregistrements suivant
    CODE | NOM | DATE_
    1 | 03 | 22/04/2012
    5 | 02 | 24/04/2012
    6 | 05 | 26/04/2012
    8 | 03 | 28/04/2012

    supposant que l'enregistrement affiché est 5 c-à-d x=2
    Apres l'insertion de l'enregsitrement 04 | 27/04/2012
    il aura le code 9 (auto incrementé)
    et pour l'afficher il faut que x=4 puisque le nouveau enregistrement sera entre 6 et 8 (selon la date)
    Et pour avoir la position du nouveau enregistrement il suffit d'envoyé la requête SELECT COUNT(CODE) FROM TABLE WHERE DATE_<= 27/04/2012
    Je veux juste savoir est ce qu'il y a une autre solution?

  10. #10
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Je crains qu'il n'y ai une confusion : il me semble que tu raisonnes séquentiel. Pour prendre un exemple concret : un tiroir avec des fiches en carton. En effet si tu ajoutes une fiche, la position de la fiche qui suit celle que tu ajoutes a changée. Elle est passé de X à X + 1. Là nous sommes d'accord

    MAIS......

    Avec une base de donnée, ce n'est plus du tout ainsi. Ce n'est pas la position qui importe c'est la "clé". Je dis clé car dans ton exemple, il y en a une : (1, 5, 6, 8). L'enregistrement 4 sera n'importe où dans ta table. Ce n'est que le SELECT qui va te le donner dans sa bonne position ....ou pas.

    Alors ma question est pourquoi as tu besoin de la position de l'enregistrement ? Car si tu veux savoir quel est l'enregistrement qui suit ou qui précède ce n'est pas bien compliqué. Mais sois assez aimable pour répondre à ma question

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. position d'un enregistrement dans une table après tri
    Par jaccess dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 31/03/2009, 14h01
  2. Position d'un enregistrement dans une table ou requête Query
    Par polinevol dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/01/2006, 03h53
  3. Position d'un enregistrement dans une table
    Par polinevol dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/01/2006, 09h10
  4. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07
  5. AJOUT d'un ENREGISTREMENT dans UNE TABLE
    Par ramo dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/08/2005, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo