Bonjour à tous,
voilà,
je souhaite récupérer la position d'un enregistrement dans une table;
exemple:
l'enregistrement portant l'id 132 (champ auto-incrément) se trouve à la position 17 (suite à divers delete).
Merci d'avance.
Cordialement.
Bonjour à tous,
voilà,
je souhaite récupérer la position d'un enregistrement dans une table;
exemple:
l'enregistrement portant l'id 132 (champ auto-incrément) se trouve à la position 17 (suite à divers delete).
Merci d'avance.
Cordialement.
Bonjour,
Le terme de position n'est pas naturellement pertinent dans un SGBD.
On peut comparer une table à un sac de billes : il n'existe pas de manière native d'ordonner les lignes.
Par contre si dans une appli tu veux récupérer la position d'une ligne dans un resultset, il te suffit d'utiliser un compteur lors du parcours de ce resultset.
Je connais cette solution mais cela nécéssite de récupérer un recordset de 23000 lignes puis de trouver la position de l'id!Envoyé par Maximilian
Cela aurait été plus simple avec une clause "...where id=121"
la colonne des id est indexé naturellement car c'est un champ primaire en autoincrément!
mais bon, s'il n'y a pas de solutions, je vais passer par une boucle!
Merci pour ta réponse en tout cas.
Cordialement.
Je ne sais pas si c'est la question mais par exemple pour récupérer la 5è ligne de la table triée par id tu peux faire un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT ... ORDER BY id LIMIT 4,1
le LIMIT permet de récupérer l'enregistrement de la position désirée or ce que je cherche est la position d'un enregistrement par exemple:Envoyé par Maximilian
l'enregistrement avec l'id=5 se trouve à la position 3 dans la liste ci-dessous:
article_id
1
2
5
donc comment connaître sa position sachant que l'on ne connait que son id ?
cordialement !
Retour à la case départ et au sac de bille...
Le SGBD se charge de ranger les données qu'on lui fournit, et il s'engage à les restituer à la demande.
Le reste est son affaire.
Dans cette boite noire, si tu insères séquentiellement et dans une table vide les id 1,2 et 5, le 5 sera au 3ème rang, mais les certitudes s'arrêtent là (et peut-être avant).
Si tu insères les id 1 à 4, puis tu supprimes 3 et 4, puis tu insères de 20 à 30, puis le 5, là il faut une boule de cristal![]()
Merci pour l'effort apporté à la réponse mais t'as peut-être raison, ma question est mauvaise.Envoyé par qi130
Cordialement
La question n'est pas nécessairement mauvaise, peut-être est-elle mal formulée ?
Si je reprends ton 1er post, l'id 132 sera effectivement le 17ème sur une sélection ordonnée sur cette colonne, mais il peut se trouver n'importe où dans l'espace disque alloué à la base ou à la table.
Si ton besoin est de connaître en live le rang de chaque tuple, je ne pense pas que le SGBD puisse te fournir ce service, sauf peut-être à fouiller les possibilités d'exploitation des index, en particulier celui que tu auras posé sur la colonne "id", mais ça reste de toute façon à ton initiative (programme).
Bonjour,Envoyé par Maximilian
Il ne faut pas généraliser ! Ce n'est parceque la solution n'est pas implémentée ou pas naturellement accessible sous MySQL qu'elle n'est pas "naturellement pertinente dans un SGBD"...
La solution existe bel et bien sous d'autre SGBD comme Oracle, PostGres (et SQL Server il me semble). Sous Oracle par exemple, il suffit de récupérer la valeur de la pseudo-colonne ROWID dans un SELECT.
Sous MySQL, malheureusement, la possibilité de récupérer le ROWID au travers du SQL ne semble pas être implémentée... Je me renseigne pour savoir si il est possible de créer une UDF qui ferais le taf...
HTH,
Je suis bien d'accord mais si ils sont uniques, rien ne dit que les rowid (ou oid/guid) forment une séquence dont l'ordre est celui de l'insertion des lignes dans la table.
De plus ils sont gérés de façon très disparate d'un SGBD à l'autre (par exemple j'ai vu que les versions futures de Postgres n'inclueraient plus l'option with oids par défaut).
A lire également : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L5
Certe, l'ordre n'est pas important, l'identification de la position l'est, on est donc d'accord.
Pour info, je viens de trouver ça, la possibilité d'utiliser _rowid pour identifier une ligne.
Si une clé primaire (PRIMARY) ou unique (UNIQUE) est établit sur une seule colonne, et que cette colonne est de type entier, vous pouvez aussi faire référence à cette colonne sous le nom _rowid (nouveau en version 3.23.11).
http://dev.mysql.com/doc/mysql/fr/create-table.html
En fait qui dit position dit ordonnancement. Ce que je voulais dire c'est que par défaut les tables n'ont pas d'ordre cohérent. Donc dans l'absolu la position d'une ligne ne veut rien dire...Envoyé par ren0
C'est juste un alias pour la clé primaireEnvoyé par ren0
![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager