L'architecture de ce scénario est la suivante:Quelle est la meilleure façon de récupérer ces données?
J'ai une table d'articles et plusieurs tables de formulaires. Plutôt que d'avoir les formulaires possèdent les éléments, les éléments possèdent les formes. C'est parce qu'un élément peut être sur plusieurs formulaires (bien qu'un seul de chaque type, mais pas nécessairement sur n'importe quel). Les formes et les éléments sont tous liés par un OrderId
commun. Cela peut être représenté comme suit:
OrderItems | Form A | Form B etc....
---------- |--------- |
ItemId |FormAId |
OrderId |OrderId |
FormAId |SomeField |
FormBId |OtherVar |
FormCId |etc...
Cela fonctionne très bien pour ces formes. Cependant, il existe une autre forme, (disons, FormX) qui ne peut pas avoir un OrderId
car elle est composée d'éléments provenant de plusieurs commandes. OrderItems
contient également une colonne pour FormXId
, mais je suis confus au sujet de la meilleure façon d'obtenir une liste des "FormX" liés à un seul OrderId
. J'utilise MySQL et je pensais que peut-être un proc stocké était le meilleur moyen d'y parvenir, mais je n'ai jamais utilisé un proc stocké sur MySQL et je ne connais pas vraiment la meilleure façon de le faire. Mon autre option (kludgy) était de frapper la DB deux fois, d'abord pour obtenir tous les éléments qui sont pour le OrderId
donné qui ont également un FormXId
, puis obtenir tous leurs FormXId
s et faire une déclaration dynamique SELECT
où je fais quelque chose comme (pseudocode)
SELECT whatever FROM sometable WHERE FormXId=x OR FormXId=y....
Évidemment, cela est loin d'être idéal, mais je ne peux pas vraiment penser à une autre façon ... rien de mieux que je pouvais faire programmation ou architecturalement? Mon code dorsal est ASP.NET.
Merci beaucoup!
MISE À JOUR
En réponse à la demande de plus d'informations:
entrée de l'échantillon:
OrderId = 1000
Exemple de sortie
FormXs:
-----------------
FormXId | FieldA | FieldB | etc
-------------------------------
1003 | value | value | ...
1020 | ... .. ..
1234 | .. . .. . . ...
Vous voyez le problème est que Formx n'a pas un seul OrderId
mais est plutôt une collection de OrderId
s. Parfois, plusieurs articles du même ordre sont sur FormX, parfois c'est juste un, la plupart des commandes n'ont aucun élément sur FormX. Mais quand quelqu'un remonte sa commande, j'ai besoin de tous les FormXs apparaissant sur leurs objets pour qu'ils puissent être modifiés/visualisés.
Je pensais à peut-être créer un proc stocké qui fait ce que j'ai dit ci-dessus, exécuter une requête pour abattre tous les OrderId
s connexes, puis un autre pour retourner les FormXs appropriés. Mais il doit y avoir un meilleur moyen ...
@omg ponies - J'ai mis à jour ma question ... svp dites-moi si vous avez besoin de plus. Merci! :) – Jason