|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : mars 2006 Messages : 333 ![]() |
Salut,
Desolé pour la question de noob mais ca fait 2 heures que je me prend la tete pour essayer formuler une requete ... ![]() (J utilise Sqlite) Voila mon probleme : Pour simplifier, disons que j ai deux tables Noeuds et Liens avec les attributs: Noeuds (id, type, lieu) Liens (id, type, noeud_From, noeud_to) Supposons aussi que pour 1 lieu du tableau Noeuds, j ai 3 types differents de noeuds: Hopital, Eglise, Ecole. Mon probleme est qu ' a l heure actuelle mes liens du type qui m interesse ont tous comme noeud de depart Hopital alors que je voudrais Eglise. Donc ce que je voudrais faire, c'est changer l attribut "noeud_From" du tableau liens, depuis le noeuds.id de l hopital pour l'Eglise du meme lieu. J espere que je suis clair ... ![]() En decomposant le probleme je suppose que ce qu il me faut est : - Utiliser un select sur "Liens", pour selectioner uniquement le type de liens qui m interesse. (disons type=8) - Identifier a quel lieu appartient le noeud de depart. - Identifier le noeud Eglise pour le meme lieu - Utiliser un Update pour mettre a jour l'attribut noeud_from. Mais voila, je n arrive pas dutout a "emboiter les morceaux ..." Si quelqu un pouvait m aider svp ... Merci Slumpy |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
bonjour,
Non vous n'etes pas clair. http://sqlpro.developpez.com/cours/arborescence/ Regardez ce lien déjà. Ensuite si vous n'arrivez à vous dépatouiller tout seul, mettez un exemple de donnée avec ce que vous avez actuellement et votre but. edit : enfin je commence peut-etre à comprendre. Pourquoi n'updatez-vous tout simplement pas le type ? ca sera moins compliquer que de vous amusez à changer toute votre arborescence |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : mars 2006 Messages : 333 ![]() |
Salut punkoff et merci d avoir pris la peine de répondre.
J ai regardé le liens que vous m avez indiqué. Je n ai pas lu en détail la partie sur les procédures stockées, mais mis a part ca tout le reste ne me pose pas de problème. Je ne sais pas trop comment l expliquer, mais je ne peux pas "updater" le type de nœud. Imaginons le tableau Nœud : id type lieu 1 Hopital Toulouse 2 Eglise Toulouse 3 Ecole Toulouse 4 Hopital Dax 5 Eglise Dax 6 Ecole Dax 7 Hopital Bordeaux 8 Eglise Bordeaux 9 Ecole Bordeaux id type noeud_from noeud_to 1 autoroute 1 7 2 chemin 2 3 3 saniter 7 8 4 saniter 8 9 5 autoroute 4 3 6 chemin 4 5 Ce que j ai besoin de faire est de changer le nœud de départ de mes liens. Par exemple, je voudrais que toutes mes autoroutes partent de l'Église de la ville et non pas de l'hôpital. Dans ce cas la mon tableau résultat après l'Update serait : id type noeud_from noeud_to 1 autoroute 2 7 2 chemin 2 3 3 saniter 7 8 4 saniter 8 9 5 autoroute 5 3 6 chemin 4 5 J espère être plus clair ? Merci encore Slumpy. |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
n'auriez vous pas un problème de modélisation ?
vous vous servez des id (primary key) pour ordonner vos "déplacements" ce qui n'est pas logique. de plus vous avez un problème de redondance de données (si fsmrel passe dans le coin il pourra mieux le décrire que moi). bref pour moi il vous manque une ou deux tables, mais sans connaitre l'aspect fonctionnel ça me semble tendu. Est-ce que votre modèle de données est figé ? - si oui on essaiera de trouver un compromis - si non je vous invite de passer par la case modélisation (de ce forum) pour exposer clairement votre besoin et repenser à tout ça à tête reposée edit : Une idée de départ serai de scinder votre table noeuds. N'y mettre que les villes, ensuite créer 2 autres table : - une qui recense les différents type de lieux communs à toutes les villes. - et une table d'association qui permet de relier une ville à un lieu avec en plus une colonne de classement. Maintenant cela risque de se compliquer si vous voulez faire des chemins différent entre les lieux de chaque ville et les liens, il faudra envisager un modèle plus complexe. Donc oui allez faire un tour sur le forum de modélisation |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : mars 2006 Messages : 333 ![]() |
Rebonjour,
Et encore merci pour votre temps. En fait, cette base Sqlite est utilisée par un logiciel extérieur pour faire un certain nombre de calculs. Je ne possède pas le code de cet outil extérieur et ne peux donc pas changer la structure de la base de données. Sous peine de plus pouvoir utiliser cet outil. Malgré mon niveau plutôt débutant en SQL, j'ai remarqué que la base de données était plutôt mal structurée, c'est vous dire .... Mais bon, me faut faire avec. Effectivement, je me sers des id. C'est ma seule manière d'identifier qui est qui ... Slumpy |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
oki,
faites un test avant sur une base de test ... je n'ai pas testé ces requêtes et je pars du principe que votre base suit le même modèle pour toutes les données. Mais l'idée générale est là : Code :
Attention si jamais vous avez des lieux qui n'ont pas ces 2 occurrences distinctes il faudra changer les requêtes ! |
||
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Inscription : mars 2006 Messages : 333 ![]() |
Merci pour la requête, je vais essayer de la comprendre dans l'esprit et le détail, mais je ne suis pas sur que l'on essaye de faire la même chose
Je suis surpris que vous vouliez mettre à jour les noeuds. C'est le noeud_from qu il faut changer plutôt non ? Moi je voyais le truc plutôt comme: (Attention, ca va piquer les yeux ....) Code :
Merci Slumpy |
||
|
|
00
|
|
|
#8 | |||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Citation:
Du coup voilà une requete qui devrait répondre mieux à votre besoin. Elle est peut être optimisable mais je n'ai pas le temps ce matin Code :
Code :
|
|||||
|
|
10
|
|
|
#9 | |||
|
Membre du Club
![]() Inscription : mars 2006 Messages : 333 ![]() |
Salut punkoff,
Citation:
Par contre, j ai un probleme pour l appliquer. Apparemment SQLite, n aime pas le fait de passer une table en parametre pour un Update. Je m explique : Code :
SELECT * FROM networks AS a WHERE a.id=1 Code :
UPDATE networks SET name="tata" WHERE id=1 Code :
UPDATE networks AS a SET name="tata" WHERE a.id=1 Du coup, je ne peux pas appliquer la requete ... Slumpy EDIT : Par contre, la requete suivante a l air de fonctionner. Y a t il un danger de ne pas savoir de quelle table/resultat on parle pour ce que tu appelais "a" ? Code :
|
|||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Ne connaissant pas SQLite je ne peux pas répondre à cette question, désolé.
Mais à vue de nez ça me semble correct. Le tout est que tu n'aies pas plusieurs tables qui partagent le même nom au niveau des exists. |
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#12 | |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
Bonjour,
Slumpy Citation:
A+ |
|
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() |
Citation:
![]() SQL est une norme et cette syntaxe n'en fait pas partie...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com