OVH Cloud OVH Cloud

Problème de chemin dans un graphe

8 réponses
Avatar
D V.
Bonjour à tous,
Je n'arrive pas à trouver la bonne syntaxe en SQL pour extraire des chemins
d'une table dont l'exemple suit

Tenant Aboutissant
A1 A2
A2 A3
A2 A4
A4 B1
B1 C1

La requête doit me retourner pour Tenant =A1et Aboutissant = A4 les chemins
A1 A2
A2 A4

Pour Tenant =A1et Aboutissant C1
A1 A2
A2 A4
A4 B1
B1 C1

Si vous pouvez m'aider

Merci d'avance

8 réponses

Avatar
J-Pierre
Bonsoir,

J'aime bien ce problème, tenants et aboutissants, mais ça sert à quoi ?
J-Pierre

"D V." a écrit dans le message de news:bn3qdf$ueb$
Bonjour à tous,
Je n'arrive pas à trouver la bonne syntaxe en SQL pour extraire des chemins
d'une table dont l'exemple suit

Tenant Aboutissant
A1 A2
A2 A3
A2 A4
A4 B1
B1 C1

La requête doit me retourner pour Tenant ¡et Aboutissant = A4 les chemins
A1 A2
A2 A4

Pour Tenant ¡et Aboutissant C1
A1 A2
A2 A4
A4 B1
B1 C1

Si vous pouvez m'aider

Merci d'avance




Avatar
Bernard Perdriaud
Bonjour,

Voir (en math) la théorie des graphes.
J'en suis resté pour ma part à une résolution de ce type de problème par une
multiplication de matrice que l'on boucle tant que le chemin de départ (1ère
case) est différent de zéro.

Pour la résolution à partir d'une base de données, je n'ai jamais essayé.

La boucle peut être longue et il reste à définir ton besoin exact :
- Existe-t-il un chemin de X vers Y ?
- Existe-t-il un chemin inverse ?
- Combien existe-t-il de chemin de X vers Y ?
- Quel est le chemin le plus court de X vers Y ?
- Faut-il organiser une tournée entre les points X, Y, Z, etc.

Un vieux grimoire sur mon étagère :
Algorithmes de graphes (Christian Prins) chez Eyrolles
ISBN : 2 - 212 - 09020 - X
avec programmes en Pascal (quel bonheur !)

Si ça peut t'aider ...
_____________
Bernard


D V. wrote:
Bonjour à tous,
Je n'arrive pas à trouver la bonne syntaxe en SQL pour extraire des
chemins d'une table dont l'exemple suit

Tenant Aboutissant
A1 A2
A2 A3
A2 A4
A4 B1
B1 C1

La requête doit me retourner pour Tenant ¡et Aboutissant = A4 les
chemins A1 A2
A2 A4

Pour Tenant ¡et Aboutissant C1
A1 A2
A2 A4
A4 B1
B1 C1

Si vous pouvez m'aider

Merci d'avance


Avatar
J-Pierre
Voir (en math) la théorie des graphes.


C'est justement ce que je voudrais éviter, je suis pas matheux, moi, je vais rien y comprendre, quelques mots pour expliquer en
général, ce serait sympa

J-Pierre

Avatar
D V.
Bonjour
Je cherche à gérer des câbles qui sont sur des dalles (Supports pour
câbles), Si je rentre trop dans les explications sa risque de devenir très
compliqué. Pour simplifier on peut imaginer que nous avons une liste de
villes et que ces villes sont reliées par des routes, tenant et aboutissant
étant les départs et arrivées de chaque route

D.V.


"J-Pierre" a écrit dans le message news:
#
Bonsoir,

J'aime bien ce problème, tenants et aboutissants, mais ça sert à quoi ?
J-Pierre

"D V." a écrit dans le message de
news:bn3qdf$ueb$

Bonjour à tous,
Je n'arrive pas à trouver la bonne syntaxe en SQL pour extraire des
chemins


d'une table dont l'exemple suit

Tenant Aboutissant
A1 A2
A2 A3
A2 A4
A4 B1
B1 C1

La requête doit me retourner pour Tenant ¡et Aboutissant = A4 les
chemins


A1 A2
A2 A4

Pour Tenant ¡et Aboutissant C1
A1 A2
A2 A4
A4 B1
B1 C1

Si vous pouvez m'aider

Merci d'avance








Avatar
Daniel Carollo
Bonjour Dominique!

A mon avis, il va vous falloir construire une structure semblable aux arbres
de decision. Cela a tres peu a voir avec de la syntaxe SQL, et beaucoup plus
du domaine de l'analyse.

Le meilleur moyen (a vue de nez) serait d'utiliser la recursivite, et c'est
la que le bat blesse: c'est tres difficile a faire en SQL. Je verrais plutot
ca soit dans une fonction (dans un module Access, donc), soit dans une
procedure stockee qui appelle une fonction dans une DLL externe (sous SQL
server par exemple).

J'espere que ca vous donne des idees.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"D V." wrote in message
news:bn3qdf$ueb$
Bonjour à tous,
Je n'arrive pas à trouver la bonne syntaxe en SQL pour extraire des
chemins

d'une table dont l'exemple suit

Tenant Aboutissant
A1 A2
A2 A3
A2 A4
A4 B1
B1 C1

La requête doit me retourner pour Tenant ¡et Aboutissant = A4 les
chemins

A1 A2
A2 A4

Pour Tenant ¡et Aboutissant C1
A1 A2
A2 A4
A4 B1
B1 C1

Si vous pouvez m'aider

Merci d'avance




Avatar
J-Pierre
J'ai compris, c'est comme ça que la SNCF détermine les trajets, ville de départ, ville d'arrivée, et les segments nécessaires pour
les joindre.
1 segment = train direct, 2 ou plus = changements.

Pour ton problème de dalle, on est pas si cons, on aurait compris aussi :-)))

J-Pierre
Avatar
D V.
Bonjour
Pour répondre à tes questions
Il y a un site qui parle de le gestion des graphes en SQL
(http://membres.lycos.fr/sqlpro/). Le problème c'est que la "
Représentation intervallaire des arborescenses" déscrite dans son site me
semble difficile à mettre en oeuvre surtout s'il faut ajouter une "branche"

- Il existe un chemin de X vers Y
- Pour simplifier je limite à un sens et un chemin unique mais plusieurs
chemins serait un plus
- Pas de tournée entre plusieurs points

DV


"Bernard Perdriaud" a écrit dans
le message news:
Bonjour,

Voir (en math) la théorie des graphes.
J'en suis resté pour ma part à une résolution de ce type de problème par
une

multiplication de matrice que l'on boucle tant que le chemin de départ
(1ère

case) est différent de zéro.

Pour la résolution à partir d'une base de données, je n'ai jamais essayé.

La boucle peut être longue et il reste à définir ton besoin exact :
- Existe-t-il un chemin de X vers Y ?
- Existe-t-il un chemin inverse ?
- Combien existe-t-il de chemin de X vers Y ?
- Quel est le chemin le plus court de X vers Y ?
- Faut-il organiser une tournée entre les points X, Y, Z, etc.

Un vieux grimoire sur mon étagère :
Algorithmes de graphes (Christian Prins) chez Eyrolles
ISBN : 2 - 212 - 09020 - X
avec programmes en Pascal (quel bonheur !)

Si ça peut t'aider ...
_____________
Bernard


D V. wrote:
Bonjour à tous,
Je n'arrive pas à trouver la bonne syntaxe en SQL pour extraire des
chemins d'une table dont l'exemple suit

Tenant Aboutissant
A1 A2
A2 A3
A2 A4
A4 B1
B1 C1

La requête doit me retourner pour Tenant ¡et Aboutissant = A4 les
chemins A1 A2
A2 A4

Pour Tenant ¡et Aboutissant C1
A1 A2
A2 A4
A4 B1
B1 C1

Si vous pouvez m'aider

Merci d'avance






Avatar
Anor
J-Pierre a confié :

| Pour ton problème de dalle, on est pas si cons, on aurait compris
| aussi :-)))

Que dalle ;-)

Anor