Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
883 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Souci sur code SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Souci sur code SQL

n°2389376
darkwolf39​17
Otaku 1 jour, Otaku toujours !
Posté le 28-06-2021 à 14:33:48  profilanswer
 

Bonjour,
 
Pour faire simple, j'ai besoin d'aide pour un code en SQL.
Je possède des connaissances assez sommaires sur ce domaine, et je ne parviens pas à avoir le comportement souhaité.
En gros j'ai deux tables : Datastore et Directory, les entrées Directory sont join avec une entrée dans Datastore (un Datastore peut avoir plusieurs Directory).
 
Je souhaiterais changer le contenus d'une colonne nommé "Status" sur tout les directory liès à un Datastore quand un Datastore est mis à jour.
 
Actuellement j'ai un code qui marche à moitié, car il ne fait ce changement que sur un seul directory à chaque changement, avez-cous une idée de pourquoi ?
 
Mon code :

Code :
  1. UPDATE Directory
  2. Set status = 0
  3. WHERE Directory.Id = (
  4.     SELECT Directory.Id
  5.     FROM Directory
  6.     INNER JOIN Datastore ON Directory.Id_Datastore = Datastore.Id
  7.     WHERE
  8.         Directory.Status <> Datastore.Status
  9.     AND
  10.         Datastore.Status = 0
  11.     );

 
 
En vous remerciant d'avance,
Cordialement


Message édité par darkwolf3917 le 29-06-2021 à 15:57:29
mood
Publicité
Posté le 28-06-2021 à 14:33:48  profilanswer
 

n°2389398
rufo
Pas me confondre avec Lycos!
Posté le 28-06-2021 à 16:36:09  profilanswer
 

Code :
  1. UPDATE Directory
  2. SET status = 0
  3. WHERE Directory.Id_Datastore = Datastore.Id AND Datastore.Id = $IDDatastoreUpdated
  4. AND  Directory.Status <> Datastore.Status
  5. AND Datastore.Status = 0


 
$IDDatastoreUpdated contient l'ID du datastore qui vient d'être mis à jour. Ca devrait le faire je pense.
Après, ça dépend des possibilités de ton SGBD. Vu que c'est sur la MAJ d'un datastore, tu pourrais utiliser un trigger pour faire la MAJ ds Directories liés. ;)
 
Edit : tu devrais avoir sous peu une réponse en mode "pavé" pas forcément très compréhensible de notre nouvel ami djinto. Faut pas t'inquiéter, c'est normal, il est fan des topics de SQL. Il nous remonte même ceux enterrés depuis plusieurs années... :whistle:


Message édité par rufo le 28-06-2021 à 16:38:24

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2389407
darkwolf39​17
Otaku 1 jour, Otaku toujours !
Posté le 28-06-2021 à 16:55:36  profilanswer
 

Bonjour Rufo,
 
Merci pour ton retour, mais du coup j'utilise déjà ce code dans un trigger, et du coup je n'est pas (ou ne connais pas ) de variable qui pourrais justement me donner l'ID du datastore qui à changé...
 
Mon SGBD est un sqlite3 ^^
 
Si tu à une autre idée du coup ça m'aiderais beaucoup, sinon je vais voir pour ajouter ce code au niveau de mes requettes en même temps que je change le status :)
 
Encore merci,
 
Cordialement

n°2389430
rufo
Pas me confondre avec Lycos!
Posté le 28-06-2021 à 18:02:50  profilanswer
 

Tu as forcément l'ID du datastore qui a été mis à jour en paramètre d'entrée de ton trigger.
Sinon, ne fait pas de trigger et traite cette MAJ au niveau du code de ton appli. Là, tu auras forcément l'ID du datastore qui a été mis à jour.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2389491
darkwolf39​17
Otaku 1 jour, Otaku toujours !
Posté le 29-06-2021 à 10:32:39  profilanswer
 

j'ai essayé ce matin, et malheureusement ça ne fonctionne pas, j'ai cette erreur en retour (que ce soit dans un trigger ou dans une simple fenêtre SQL) :
 
[10:27:01] Erreur pendant l’exécution de la requête sur la base de données « internal » : no such column: Datastore.Id
 
Pourtant la table Datastore possède bien une colonne Id...
 
Je comprend pas du coup, je vais voir si je trouve une autre méthode mais je commence vraiment à sentir mes lacunes en SQL, après je suis pas du tout programmateur de base (je suis dans le système/réseaux) :/
 
Merci beaucoup ^^

n°2389492
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2021 à 10:39:47  profilanswer
 

Peut-être que tu peux pas faire de jointure sur une autre table dans une requête de type UPDATE.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2389495
darkwolf39​17
Otaku 1 jour, Otaku toujours !
Posté le 29-06-2021 à 10:46:34  profilanswer
 

Bon, j'ai finalement réussi en reprenant mon code initial et en faisant un (quantième) tour sur la doc.
j'ai remplacer le  

Code :
  1. WHERE Directory.Id = ( bla bla bla);


Par

Code :
  1. WHERE Directory.Id IN (bla bla bla);


et j'ai utiliser les variable de trigger pour retrouver mes Id et Status, du coup ça donne :

Code :
  1. UPDATE Directory
  2. Set status = new.Status
  3. WHERE Directory.Id IN (
  4.     SELECT Directory.Id
  5.     FROM Directory
  6.     INNER JOIN Datastore ON Directory.Id_Datastore = Datastore.Id
  7.     WHERE Directory.Status <> Datastore.Status
  8.     AND Datastore.Id = new.Id
  9.     );


 
Merci rufo pour la piste sur les variables dans les trigger, je pense que j'aurais encore tourné un moment dans le vent XD
 
Sujet fini, merci encore et bonne continuation :)
 
PS : je croit bien qu'il n'est pas possible de faire de jointure sans faire d'embriquement avec des ( ) en sqlite3 pour les UPDATE :/


Message édité par darkwolf3917 le 29-06-2021 à 10:48:27
n°2389501
rufo
Pas me confondre avec Lycos!
Posté le 29-06-2021 à 11:45:26  profilanswer
 

Content si tu as trouvé une solution :)
Mets "[Résolu]" en début du titre de ton topic en éditant le premier message de ton sujet.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Souci sur code SQL

 

Sujets relatifs
Code range VBAAlignement avec visual studio code
[C#] Code décompilé ne recompile pas...aide écriture code c++ recherche et cumul de nombres
[SQL] Trouver une chaine dans une phraseProposition playlist Youtube SQL/Powershell/Postgres
un code php qui déconne (erreur bête surement )[SQL] Comment passer de lignes par dates à des lignes par période
[KSH-88] récupérer le code retour d'un sous-shell[Python] Utilisation d'un code existant
Plus de sujets relatifs à : [Résolu] Souci sur code SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR