|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Bonjour,
je me permets de poster car je n'arrive pas à écrire une requête... Voici mes tables : Actions[id,libelle] ----------------- 1 Ac1 2 Ac2 3 Ac3 ---------------- Articles[id,libelle] ----------------- 1 Ar1 2 Ar2 3 Ar3 ........ 9 Ar9 10 Ar10 11 Ar11 12 Ar12 ---------------- ArticlesSimilaires[id,id_groupe,id_Article*] ----------------- 1 1 1 2 1 9 3 1 10 4 2 2 5 2 12 6 3 13 ---------------- Il faut lire l'article 1 est similaire aux article 9 et 10. De même l'article 2 et similaire à article 12 et 13. RegroupementActionsArticles[id,id_Action*,id_Article*] ----------------- 1 1 1 2 1 3 3 2 2 4 2 3 5 3 3 6 3 3 ---------------- Il faut lire l'action 1 (Ac1) peut-être appelée avec exactement la combinaison d'article 1 et 3 (ou 9 et 3 ou 10 et 3 avec la correspondance article similaire). Le but de la requête est de donner les Actions à partir d'une combinaison d'articles sachant que certains articles peuvent être remplacés par un article "similaire". Ex 1: J'ai les articles Ar1 et Ar3 qu'elle action lui correspond ? réponse l'action 1. Ex 2: J'ai les articles Ar1 et Ar9 qu'elle action lui correspond ? réponse aucune ! Ex 3: J'ai les articles Ar9 et Ar3 qu'elle action lui correspond ? réponse l'action 1. D'avance merci. Si besoin de précisions ne pas hésiter... |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
est-ce que les combinaisons peuvent être composées de plus de deux articles ? ou à l'inverse, d'un seul article ? |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Effectivement on peut trouver dans la table RegroupementAA plusieur fois le même article pour une action.
RegroupementActionsArticles[id_Action,id_Article] Ci-dessous une visualisation de la table enrichie (avec import des libellés correspondants aux clés étrangères id_Article et id_Action grâce à un join). [id_Action][Action.libellé] [id_Article][Article.libelle] ---------------------------------------------------------------------------------- 1 Création d"un fuseau 1 FILM12µm 1 Création d"un fuseau 3 Ruban 2 Création d"un assemblage de fuseau 4 Fuseau 2 Création d"un assemblage de fuseau 3 Ruban 2 Création d"un assemblage de fuseau 4 Fuseau 3 Ajout d"un fuseau à un assemblage 5 Assemblage 3 Ajout d"un fuseau à un assemblage 3 Ruban 3 Ajout d"un fuseau à un assemblage 4 Fuseau 4 Création d"un assemblage de fuseau 5 Assemblage 4 Création d"un assemblage de fuseau 3 Ruban 4 Création d"un assemblage de fuseau 5 Assemblage ---------------------------------------------------------------------------------- J'ai cependant trouvé une solution en couplant une requête plus basique à mon programme. Le détail à suivre dans le prochain post. Si vous trouver une requête qui traite ma fonction d'un seul coup je suis bien entendu preneur. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
et donc, il faut que la requete soit en mesure de repondre à la question :
J'ai les articles 5, 3 et 4, quelle actions ? => l'action 3 (selon le dernier exemple) Mais ne reponde rien si on a seulement les articles 5 et 4 ? et si on a seulement les articles 5 et 4, mais que 4 est similaire a 3, que doit-elle répondre ? Votre exemple est relativement clair, mais j'ai l'impression que le besoin est plus général... Pouvez vous expliquer un peu le contexte, ca aidera peut etre a comprendre D'autre part, d'ou proviendra la combinaison des articles disponibles ? (le but est-il de voir toutes les actions possibles en fonction de votre stock ? lequel se trouve dans une autre table ?) |
|
|
00
|
|
|
#5 | ||
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Ma méthode (on prendra les données de la mise en situation 1er post)
Utilisateur entre une liste d'article (9 et 3) Fonction de création des combinaisons possibles donnes 3 listes : 1-3 9-3 10-3 POUR chaque combinaisons d'article Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Oui tout à fait. Si on n'a pas exactement les articles 5 3 et 4 elle requete doit renvoyer vide.
Explication du contexte. Cette fonction est développée dans le cadre d'un outil de production de pièces usinées afin de tracer les numéro de série. La dite fonction doit permettre de trouver les actions qui correspondent à une liste d'articles. Les articles étant renseignés par l'utilisateur. Exemple 1: l'utilisateur sélectionne 2 fuseaux et du ruban et le système me propose "création d'un assemblage". Exemple 2 : utilisateur sélectionne 1 FILM 15µ et du ruban or la table de correspondance regroupementActionArticle ne connait que 1 FILM 12µ + 1 ruban = "Création d'un fuseau". Mais elle sait également qu'elle peut remplacer le FILM 15µ par du FILM 12µ (grâce à la table ArticleSimilaires) Cette fonction doit permettre de proposer des actions à l'utilisateur mais également d'empécher l'administrateur de créer une action"Création d'un fuseau" avec la combinaison FILM 15µ + Ruban car nous avons déjà la combinaison FILM 12µ + Ruban et que FILM12µ et FILM15µ sont dits similaires. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Quelle est votre version de SQL Server ?
|
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
SQL SERVEUR 2008 R2 vEXPRESS mais 2011 v standard lors du déploiement chez le client.
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
une autre question également :
Il faut retrouver les actions pour lesquelles tous les articles sont présent dans la liste. Mais si certaines dans la liste ne sont pas necessaire pour une action, doit-elle est slectionnée quand meme par la requete ? par exemple, vous dites : Citation:
|
|
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Non l'action ne doit pas être sélectionnée.
La sélection d'un action se fait uniquement s'il y a le nombre exact d'articles. Soit l'action A_x composée des articles Ar_w,Ar_x et Ar_y. Soit l'article Ar_z ne faisant partit d'aucune action. Soit l'article Ar_wBis similaire de l'article Ar_w. Si l'utilisateur passe en paramètre Ar_w,Ar_x ,Ar_y Ar_z le système retourne null. Quelques cas et le résultat associé : Ar_w,Ar_x --> null il manque Ar_y Ar_w,Ar_w,Ar_y --> null il manque Ar_y et on a un Ar_w en trop Ar_w,Ar_w,Ar_x ,Ar_y -->null n a un Ar_w en trop Ar_w,Ar_x ,Ar_y --> A_x ok tout y est Ar_x,Ar_w,Ar_y --> A_x tout y est même si le panel n'est pas dans l'ordre Ar_x,Ar_wBis,Ar_y -->A_x tout y est car même s'il manque Ar_w; Ar_wBis et dans le panel. En gros il faut exactement les bon articles, le bon nombre, certains peuvent être échangés et l'ordre d'ajout n'a aucune importance. |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Est-ce que cette requete répond au besoin (et surtout aux différents cas particuliers ?)
Code SQL :
|
||
|
|
10
|
|
|
#12 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Bonjour,
heu oui ça à l'air de correspondre merci beaucoup pour le temps passé. Par contre cela dépasse de loin mes compétences en SQL... et je n'ai aucune idée de comment l'appliquer à ma base... J'ai compris qu'il y avait une première partie qui permet de simuler les tables existantes (Articles,Articles_similaires,Actions,regroupementActionAssemblage) une deuxième qui permet de créer des 'tables virtuelles' (liste des articles saisis etc (là je flanche)) et enfin la fonction qui s'appuie sur le tout. Comment intégrer les tables existantes ? Un petit cours SQL serait le bienvenu |
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
La table liste est a garder, c'est elle qui contient la liste "saisie par l'utilisateur". Comment comptez vous appeler la requête depuis le programme (requête appelée directement depuis le programme, procédure stockée,...). Vous pourrez éventuellement modifier cette partie en fonction de ça. Citation:
Pour comprendre le fonctionnement, vous pouvez remplacer la requête finale par un SELECT * sur les pseudo tables, afin de voir ce qu'elles contiennent... Mais pour faire fonctionner la requête sur votre base, remplacez juste le nom des tables et des colonnes par les vrais noms (supprimez les pseudo tables pour le jeu d'essai) et ça devrait être bon |
||
|
|
00
|
|
|
#14 | ||
![]() ![]() |
J'ai une requête sans fonctions de fenêtrage ni sous-requête (sauf celle qui calcule les éléments saisis) :
Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#15 | ||
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Merci beaucoup Aieuuuu voila ma requête :
Code :
(n'en ayant jamais fait... Pour Waldar quel est l'avantage de ta requête par rapport à celle de Aieuuu ? Plus de rapidité ? plus légère ? Je vais m'y pencher dessus... Merci encore pour vos réponses. |
||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
elle ne vérifie pas que tous les articles nécessaires à une action soient présents...
Si par exemple dans la liste on met juste art3, les actions 1 et 2 ressortent |
|
|
00
|
|
|
#17 | ||
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Haaa.. ok
Code :
|
||
|
|
00
|
|
|
#18 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Nos posts se sont croisés
pas tout à fait non plus... Elle vérifie les autres règles (pas plus d'articles saisis que d'article pour une action,...) Citation:
A commencer par cet article sur la division relationnelle... qui se rapproche de ton problème (mais difficile a mettre en place a cause des règles sur les articles "similaires" qui font qu'un article peut en cacher un autre...) |
|
|
|
00
|
|
|
#19 |
|
Membre habitué
![]() Développeur informatique Inscription : août 2010 Messages : 118 ![]() |
Bon je vais troquer mon livre de chevet contre un bon tutoriel SQL.
Au plaisir et merci encore |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com