Probleme requete update avec incrementation numérique

Le
Rogério Altman
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand une
table:

Soit la tabl suivante:

champ1 champ2 groupe
- --
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier" est
atteint, pour avoir ceci:

champ1 champ2 groupe
- --
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3


Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #18209251
Il doit manquer une info qui permettrait de savoir quel est l'ordre dans
lequel ces lignes sont à lire. Ici on dirait que l'ordre physique des lignes
à une importance ce qui n'est jamais le cas dans une base de données basée
sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir les
lignes qui sont "avant"). En supposant qu'il y ait une clé primaire
auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE champ1='premier'
AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions c'est le
nombre de lignes qui ont "premier" comme valeur de champ1 et qui sont déjà
dans la table + 1 si la ligne en cours d'insertion est-elle même avec
"premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une toute
autre approche qui pourrait non seullement permettre de résoudre ce problème
mais aussi de stocker ces données sous une forme plus facilement exploitable
(que sont ces notions de "premier","en cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand une
table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier"
est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+




Dolten Altgor
Le #18212281
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre dans
lequel ces lignes sont à lire. Ici on dirait que l'ordre physique des
lignes à une importance ce qui n'est jamais le cas dans une base de
données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir les
lignes qui sont "avant"). En supposant qu'il y ait une clé primaire
auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions c'est
le nombre de lignes qui ont "premier" comme valeur de champ1 et qui sont
déjà dans la table + 1 si la ligne en cours d'insertion est-elle même avec
"premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre ce
problème mais aussi de stocker ces données sous une forme plus facilement
exploitable (que sont ces notions de "premier","en cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand une
table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier"
est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+









Fred BROUARD
Le #18216621
Cela n'est pas faisable car il n'existe aucun ordre pré établis dans les
ligne des tables des bases de données relationnelles qui sont par nature
ensemblistes.
Lisez l'article que j'ai écrit à ce sujet :
http://blog.developpez.com/sqlpro?title=les_donnees_d_une_base_sql_sont_des_ense

Il faut récrire votre modèle en y incorporant le lien d'arborescence.
Vous pouvez utiliser une clef étrangère d'auto relation ou bien le
modèle intervallaire qui possède l'avantage d'éviter les requêtes
récursives.
Lisez les articles que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/arborescence/
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

A +


Dolten Altgor a écrit :
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre dans
lequel ces lignes sont à lire. Ici on dirait que l'ordre physique des
lignes à une importance ce qui n'est jamais le cas dans une base de
données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir les
lignes qui sont "avant"). En supposant qu'il y ait une clé primaire
auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions c'est
le nombre de lignes qui ont "premier" comme valeur de champ1 et qui sont
déjà dans la table + 1 si la ligne en cours d'insertion est-elle même avec
"premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre ce
problème mais aussi de stocker ces données sous une forme plus facilement
exploitable (que sont ces notions de "premier","en cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand une
table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier"
est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+














--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Dolten Altgor
Le #18217651
Merci de votre réponse, je venais justement de lire avec grand intérêt
l'article sur les arboresces intevallaires!
Malheureusement, je n'ai pas la main sur la table des données, elle me sont
parvenues tel quel.

Par contre je peux determiner en partie qui est "fils" de qui... je crois.
A+


"Fred BROUARD" %
Cela n'est pas faisable car il n'existe aucun ordre pré établis dans les
ligne des tables des bases de données relationnelles qui sont par nature
ensemblistes.
Lisez l'article que j'ai écrit à ce sujet :
http://blog.developpez.com/sqlpro?title=les_donnees_d_une_base_sql_sont_des_ense

Il faut récrire votre modèle en y incorporant le lien d'arborescence.
Vous pouvez utiliser une clef étrangère d'auto relation ou bien le modèle
intervallaire qui possède l'avantage d'éviter les requêtes récursives.
Lisez les articles que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/arborescence/
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

A +


Dolten Altgor a écrit :
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre dans
lequel ces lignes sont à lire. Ici on dirait que l'ordre physique des
lignes à une importance ce qui n'est jamais le cas dans une base de
données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir les
lignes qui sont "avant"). En supposant qu'il y ait une clé primaire
auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions c'est
le nombre de lignes qui ont "premier" comme valeur de champ1 et qui sont
déjà dans la table + 1 si la ligne en cours d'insertion est-elle même
avec "premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre
ce problème mais aussi de stocker ces données sous une forme plus
facilement exploitable (que sont ces notions de "premier","en
cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand
une table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier"
est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+














--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************



Fred BROUARD
Le #18218961
Dans ce cas, rien ne vous empêche de créer une table supplémentaire dans
votre base et d'y rajouter ces informations de relation.

De manière générale, l'ajout d'un objet à une base de données ne modifie
par le fonctionnement d'une application. En particulier l'ajout d'une
table ne doit avoir aucun effet.

A +

Dolten Altgor a écrit :
Merci de votre réponse, je venais justement de lire avec grand intérêt
l'article sur les arboresces intevallaires!
Malheureusement, je n'ai pas la main sur la table des données, elle me sont
parvenues tel quel.

Par contre je peux determiner en partie qui est "fils" de qui... je crois.
A+


"Fred BROUARD" %
Cela n'est pas faisable car il n'existe aucun ordre pré établis dans les
ligne des tables des bases de données relationnelles qui sont par nature
ensemblistes.
Lisez l'article que j'ai écrit à ce sujet :
http://blog.developpez.com/sqlpro?title=les_donnees_d_une_base_sql_sont_des_ense

Il faut récrire votre modèle en y incorporant le lien d'arborescence.
Vous pouvez utiliser une clef étrangère d'auto relation ou bien le modèle
intervallaire qui possède l'avantage d'éviter les requêtes récursives.
Lisez les articles que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/arborescence/
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

A +


Dolten Altgor a écrit :
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre dans
lequel ces lignes sont à lire. Ici on dirait que l'ordre physique des
lignes à une importance ce qui n'est jamais le cas dans une base de
données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir les
lignes qui sont "avant"). En supposant qu'il y ait une clé primaire
auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions c'est
le nombre de lignes qui ont "premier" comme valeur de champ1 et qui sont
déjà dans la table + 1 si la ligne en cours d'insertion est-elle même
avec "premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre
ce problème mais aussi de stocker ces données sous une forme plus
facilement exploitable (que sont ces notions de "premier","en
cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand
une table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier"
est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+











--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Patrice
Le #18227691
Oui mais pourquoi "physique nucleaire" vient avant "physique moleculaire" ?
En l'absence d'une information de tri :
- soit on accepte que les données soit affichées dans un ordre choisi par
SQL Server (et éventuellement même que cet ordre varie)
- il serait peut-être aussi possible de trier par ordre alphabétique de
colonne 2
- sinon il faudrait ajouter explicitement une information de tri
(éventuellement dans une table supplémentaire si on ne veut pas modifier les
tables existantes)

Cette présentation me semble beaucoup plus commode à exploiter que la
présentation initiale avec premier/dernier etc... Si SQL Server 2005, pu
plus voir les "CTE" qui permettent de mettre à plat l'arborescence notamment
si celle ci n'est pas trop volumineuse (taille de l'arborescence ?) Ou
simplement alimenter l'arbre de façon récursive. Tout depend du volume des
données.

--
Patrice

"Dolten Altgor"
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre dans
lequel ces lignes sont à lire. Ici on dirait que l'ordre physique des
lignes à une importance ce qui n'est jamais le cas dans une base de
données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir les
lignes qui sont "avant"). En supposant qu'il y ait une clé primaire
auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions c'est
le nombre de lignes qui ont "premier" comme valeur de champ1 et qui sont
déjà dans la table + 1 si la ligne en cours d'insertion est-elle même
avec "premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre ce
problème mais aussi de stocker ces données sous une forme plus facilement
exploitable (que sont ces notions de "premier","en cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand
une table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que "premier"
est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+













Dolten Altgor
Le #18233881
Merci à Fred et Patrice,

Je vais donc exploiter cette possibilité de création d'une nouvelle table et
me pencher sur l'arborescence intervallaire. Par contre, je ne puis définir
à la main les catégories "parents" et "enfants" de mon arborescence au vu de
leur nombre, Il faut que je reconstitue cette arborescence à partir des
termes "enfants". En gros, je pars de la droite de mon arborescence
"petitfils" pour arriver au "premier niveau". Par contre je ne vois pas trop
comment définir les marges gauche et droite de chaque petitfils, fils et
famille dynamiquement (car encore une fois je peux avoir des milliers de
petitfils)...

premier_niveau--
|
-- famille1---
| |
| --- fils1---
| |
| ---- petitfils1
|
-- famille2---
| |
| --- fils2---
| |
| ---- petitfils2
|

Merci de vos conseils avisés
A+

"Fred BROUARD"
Dans ce cas, rien ne vous empêche de créer une table supplémentaire dans
votre base et d'y rajouter ces informations de relation.

De manière générale, l'ajout d'un objet à une base de données ne modifie
par le fonctionnement d'une application. En particulier l'ajout d'une
table ne doit avoir aucun effet.

A +

Dolten Altgor a écrit :
Merci de votre réponse, je venais justement de lire avec grand intérêt
l'article sur les arboresces intevallaires!
Malheureusement, je n'ai pas la main sur la table des données, elle me
sont parvenues tel quel.

Par contre je peux determiner en partie qui est "fils" de qui... je
crois.
A+


"Fred BROUARD" news: %
Cela n'est pas faisable car il n'existe aucun ordre pré établis dans les
ligne des tables des bases de données relationnelles qui sont par nature
ensemblistes.
Lisez l'article que j'ai écrit à ce sujet :
http://blog.developpez.com/sqlpro?title=les_donnees_d_une_base_sql_sont_des_ense

Il faut récrire votre modèle en y incorporant le lien d'arborescence.
Vous pouvez utiliser une clef étrangère d'auto relation ou bien le
modèle intervallaire qui possède l'avantage d'éviter les requêtes
récursives.
Lisez les articles que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/arborescence/
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

A +


Dolten Altgor a écrit :
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une
arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" news: 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre
dans lequel ces lignes sont à lire. Ici on dirait que l'ordre physique
des lignes à une importance ce qui n'est jamais le cas dans une base
de données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir
les lignes qui sont "avant"). En supposant qu'il y ait une clé
primaire auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions
c'est le nombre de lignes qui ont "premier" comme valeur de champ1 et
qui sont déjà dans la table + 1 si la ligne en cours d'insertion
est-elle même avec "premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre
ce problème mais aussi de stocker ces données sous une forme plus
facilement exploitable (que sont ces notions de "premier","en
cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand
une table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que
"premier" est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+











--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************









--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************


Fred BROUARD
Le #18254021
Dolten Altgor a écrit :

[...]
> Par contre je ne vois pas trop comment définir les marges gauche et
> droite de chaque petitfils, fils et famille dynamiquement (car encore
> une fois je peux avoir des milliers de petitfils)...

Il suffit de rattacher l'élément à insérer à un élément déjà présent
dans l'arbre.

A +


Merci à Fred et Patrice,

Je vais donc exploiter cette possibilité de création d'une nouvelle table et
me pencher sur l'arborescence intervallaire. Par contre, je ne puis définir
à la main les catégories "parents" et "enfants" de mon arborescence au vu de
leur nombre, Il faut que je reconstitue cette arborescence à partir des
termes "enfants". En gros, je pars de la droite de mon arborescence
"petitfils" pour arriver au "premier niveau". Par contre je ne vois pas trop
comment définir les marges gauche et droite de chaque petitfils, fils et
famille dynamiquement (car encore une fois je peux avoir des milliers de
petitfils)...

premier_niveau--
|
-- famille1---
| |
| --- fils1---
| |
| ---- petitfils1
|
-- famille2---
| |
| --- fils2---
| |
| ---- petitfils2
|

Merci de vos conseils avisés
A+

"Fred BROUARD"
Dans ce cas, rien ne vous empêche de créer une table supplémentaire dans
votre base et d'y rajouter ces informations de relation.

De manière générale, l'ajout d'un objet à une base de données ne modifie
par le fonctionnement d'une application. En particulier l'ajout d'une
table ne doit avoir aucun effet.

A +

Dolten Altgor a écrit :
Merci de votre réponse, je venais justement de lire avec grand intérêt
l'article sur les arboresces intevallaires!
Malheureusement, je n'ai pas la main sur la table des données, elle me
sont parvenues tel quel.

Par contre je peux determiner en partie qui est "fils" de qui... je
crois.
A+


"Fred BROUARD" news: %
Cela n'est pas faisable car il n'existe aucun ordre pré établis dans les
ligne des tables des bases de données relationnelles qui sont par nature
ensemblistes.
Lisez l'article que j'ai écrit à ce sujet :
http://blog.developpez.com/sqlpro?title=les_donnees_d_une_base_sql_sont_des_ense

Il faut récrire votre modèle en y incorporant le lien d'arborescence.
Vous pouvez utiliser une clef étrangère d'auto relation ou bien le
modèle intervallaire qui possède l'avantage d'éviter les requêtes
récursives.
Lisez les articles que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/arborescence/
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

A +


Dolten Altgor a écrit :
Merci de ta réponse.
en fait, cette table contient des données "aplaties" d'une
arborescence.
Je vais essayer d'être plus clair en donnant un meilleur exemple:

Soit ue table de ce type:

colonne1 colonne2
--------- ---------
term tout
term sciences
nt physique
nt chimie
nt médecine
bt tout
term physique nucleaire
term physique moléculaire
bt sciences
term chimie militaire
term chimie indudtrielle
bt sciences
term medecine du travail
term medecine du moyen-age
term medecine chinoise
bt sciences

Ceci doit correspondre à une arborescence de ce type:

tout
---- sciences
---- physique
--- physique nucleaire
--- physique moleculaire
--- sciences
---- chimie
--- chimie militaire
--- chimie industrielle
--- sciences
---- médecine
--- medecine du moyen-age
--- medecine chinoise
--- sciences
---- tout

Je rappelle que jen'ai pas d'autres données que colonne1 et colonne2.
Merci de vos idées lumineuses

A+

"Patrice" news: 495100c6$0$9398$
Il doit manquer une info qui permettrait de savoir quel est l'ordre
dans lequel ces lignes sont à lire. Ici on dirait que l'ordre physique
des lignes à une importance ce qui n'est jamais le cas dans une base
de données basée sur SQL.

Sinon en gros l'idée est de compter le nombre de chaîne "premier" qui
viennent avant la ligne considérée (mais une info manque pour savoir
les lignes qui sont "avant"). En supposant qu'il y ait une clé
primaire auto-incrémentée (non testé) :

UPDATE Main SET Groupe=(SELECT COUNT(*) FROM MaTable WHERE
champ1='premier' AND pk<=t.pk)
FROM MaTable AS t

Si la colonne groupe est à créer au fur et à mesure des insertions
c'est le nombre de lignes qui ont "premier" comme valeur de champ1 et
qui sont déjà dans la table + 1 si la ligne en cours d'insertion
est-elle même avec "premier" en champ1...

Eventuellement expliquer le contexte peut permettre ici de prendre une
toute autre approche qui pourrait non seullement permettre de résoudre
ce problème mais aussi de stocker ces données sous une forme plus
facilement exploitable (que sont ces notions de "premier","en
cours","dernier" ?)

--
Patrice


"Rogério Altman" 4950298d$0$18377$
Bonsoir à tous,
J'ai un petit probleme concernant l'incrementation d'un compteur dand
une table:

Soit la tabl suivante:

champ1 champ2 groupe
------- --------- --------
premier pierre
encours paul
encours marie
encours jean
dernier jacques
premier charles
encours philippe
encous yann
dernier mary
premier julien

Je voudrais que le champ groupe s'auto-incrémente d'1 dès que
"premier" est atteint, pour avoir ceci:
... ... ...
champ1 champ2 groupe
------- --------- --------
premier pierre 1
encours paul 1
encours marie 1
encours jean 1
dernier jacques 1
premier charles 2
encours philippe 2
encous yann 2
dernier mary 2
premier julien 3
... ... ...

Qqun aurait une idée (requete "normale", requete analytique?).
Merci de vos idées
A+








--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************







--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************








--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Publicité
Poster une réponse
Anonyme