此方案的架构如下:
我有一张物品表和几张表格。不是让表单拥有项,而是项拥有表单。这是因为一个项可以在多个窗体上(虽然每种类型只有一个,但不一定在任何窗体上)。表单和项都由一个公共OrderId
绑定在一起。可以这样表示:
OrderItems | Form A | Form B etc....
---------- |--------- |
ItemId |FormAId |
OrderId |OrderId |
FormAId |SomeField |
FormBId |OtherVar |
FormCId |etc...
这对这些表单很有用。但是,还有另一种表单(例如,FormX)不能有
OrderId
,因为它包含来自多个订单的项。OrderItems
也包含一个FormXId
列,但是我很困惑如何获得与单个OrderId
相关的“FormX”列表。我使用的是MySQL,我想可能存储proc是最好的方法,但我从未在MySQL上使用过存储proc,也不知道最好的方法。我的另一个(kludgy)选项是点击DB两次,首先获取给定OrderId
的所有项,这些项也有一个FormXId
,然后获取它们的所有FormXId
并执行一个动态SELECT
语句,其中我执行类似的操作(伪代码)SELECT whatever FROM sometable WHERE FormXId=x OR FormXId=y....
显然这不太理想,但我真的想不出别的办法。。。有什么更好的我可以做的程序或架构?我的后端代码是ASP.NET。
非常感谢!
更新
为了响应对更多信息的请求:
样本输入:
OrderId = 1000
样本输出
FormXs:
-----------------
FormXId | FieldA | FieldB | etc
-------------------------------
1003 | value | value | ...
1020 | ... .. ..
1234 | .. . .. . . ...
你看到的问题是,FormX没有一个
OrderId
项,而是一个OrderId
s的集合。有时来自同一订单的多个项目在FormX上,有时它只是一个,大多数订单在FormX上没有任何项目。但是当有人调出他们的订单时,我需要显示他们的物品所属的所有表单,以便可以修改/查看它们。我正在考虑创建一个存储过程来执行我上面所说的,运行一个查询来下拉所有相关的
OrderId
s,然后运行另一个查询来返回适当的formx。但必须有更好的方法。。。 最佳答案
我知道你需要一个“FormX”的列表和一个订单id相关。你说,OrderItems确实包含FormXId的列。
您可以发出以下查询:
select
FormX.*
From
OrderItems
join
Formx
on
OrderItems.FormXId = FormX.FormXId
where
OrderItems.OrderId = @orderId
您需要将@orderId传递给查询,您将得到一个包含与此订单相关的FormX记录的记录集。
您可以使用@orderId parameter将此查询打包为存储过程,也可以使用动态sql将@orderId替换为执行查询所需的实际订单号。
关于asp.net - 检索此数据的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2360714/