【问题标题】:What's the best way to retrieve this data?检索此数据的最佳方法是什么?
【发布时间】:2010-03-02 03:27:31
【问题描述】:

此场景的架构如下:

我有一个项目表和几个表格。与其让表单拥有项目,不如让项目拥有表单。这是因为一个项目可以在多个表单上(虽然每种类型只有一个,但不一定在任何表单上)。表单和项目都由一个共同的OrderId 捆绑在一起。这可以这样表示:

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

这适用于这些表单。但是,还有另一种表单(例如,FormX)不能有OrderId,因为它包含来自多个订单的项目。 OrderItems 确实包含FormXId 的列,但我对获取与单个OrderId 相关的“FormX”列表的最佳方法感到困惑。我正在使用 MySQL,并认为存储过程可能是最好的方法,但我从未在 MySQL 上使用过存储过程,也不知道最好的方法。我的另一个(kludgy)选项是两次访问数据库,首先获取给定OrderId 的所有项目,这些项目也有FormXId,然后获取所有FormXIds 并执行动态@987654330 @ 语句,我在其中执行类似(伪代码)的操作

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 上没有任何项目。但是当有人提出他们的订单时,我需要显示他们的项目所属的所有 FormX,以便可以修改/查看它们。

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

【问题讨论】:

  • @omg ponies - 我更新了我的问题...如果您需要更多,请告诉我。谢谢! :)

标签: asp.net mysql stored-procedures information-architecture


【解决方案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 替换为您执行查询的真实订单号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多