此方案的架构如下:
我有一张物品表和几张表格。不是让表单拥有项,而是项拥有表单。这是因为一个项可以在多个窗体上(虽然每种类型只有一个,但不一定在任何窗体上)。表单和项都由一个公共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项,而是一个OrderIds的集合。有时来自同一订单的多个项目在FormX上,有时它只是一个,大多数订单在FormX上没有任何项目。但是当有人调出他们的订单时,我需要显示他们的物品所属的所有表单,以便可以修改/查看它们。
我正在考虑创建一个存储过程来执行我上面所说的,运行一个查询来下拉所有相关的OrderIds,然后运行另一个查询来返回适当的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/

10-11 19:34