检索此数据的最佳方法是什么?

What's the best way to retrieve this data?

提问人:Jason 提问时间:3/2/2010 最后编辑:Jon SeigelJason 更新时间:7/10/2010 访问量:130

问:

此方案的体系结构如下:

我有一个项目表和几个表格表。不是让窗体拥有项目,而是让项目拥有窗体。这是因为一个项目可以位于多个表单上(尽管每种类型只有一个表单,但不一定存在于任何表单上)。表单和项目都由一个共同的 .这可以这样表示:OrderId

OrderItems | Form A   | Form B etc....
---------- |--------- |
ItemId     |FormAId   |
OrderId    |OrderId   |
FormAId    |SomeField |
FormBId    |OtherVar  |
FormCId    |etc...

这适用于这些表单。但是,还有另一种形式(例如,FormX)不能具有,因为它由来自多个订单的项目组成。 确实也包含一列,但我对获取与单个相关的“FormX”列表的最佳方法感到困惑。我正在使用 MySQL,并且认为存储过程可能是最好的方法,但我从未在 MySQL 上使用过存储过程,并且真的不知道最好的方法。我的另一个(笨拙的)选择是点击数据库两次,首先获取给定的所有项目,这些项目也具有 ,然后获取它们的所有 s 并执行一个动态语句,我在其中执行类似(伪代码)之类的操作OrderIdOrderItemsFormXIdOrderIdOrderIdFormXIdFormXIdSELECT

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 没有一个单一的,而是一个集合。有时同一订单中的多个项目在 FormX 上,有时只有一个项目,大多数订单在 FormX 上没有任何项目。但是当有人拉出他们的订单时,我需要显示他们的项目所属的所有 FormX,以便可以修改/查看它们。OrderIdOrderId

我正在考虑创建一个存储过程来执行我上面所说的操作,运行一个查询以拉下所有相关查询,然后运行另一个查询以返回相应的 FormX。但必须有更好的方法......OrderId

asp.net mysql 存储过程 信息架构

评论

0赞 Jason 3/2/2010
@omg小马 - 我更新了我的问题......如果您需要更多,请告诉我。谢谢!:)

答:

1赞 Andrew Savinykh 3/2/2010 #1

我知道您需要获取与单个 OrderId 相关的“FormX”列表。你说,OrderItems 确实包含 FormXId 的列。 您可以发出以下查询:

select 
    FormX.*
From 
    OrderItems
join
    Formx
on
    OrderItems.FormXId = FormX.FormXId
where
    OrderItems.OrderId = @orderId

您需要将@orderId传递到查询中,您将获得一个记录集,其中包含与此订单相关的 FormX 记录。

您可以使用@orderId参数将此查询打包为存储过程,也可以使用动态 sql 并将 @orderId 替换为执行查询的实际订单号。