1

這種情況下的架構如下:檢索這些數據的最佳方法是什麼?

我有一個項目表和幾個表格的表格。物品不是擁有物品,而是物品擁有這些物品。這是因爲一個項目可以有多種形式(儘管每種類型只有一種,但不一定是)。表格和項目都通過共同的OrderId連接在一起。這可以表示如下:

​​

這對這些形式很有效。但是,還有另一種形式(比如FormX),它不能有OrderId,因爲它由多個訂單中的項目組成。 OrderItems也包含FormXId的列,但我對獲取與單個OrderId相關的「FormX」列表的最佳方式感到困惑。我正在使用MySQL,並且正在考慮可能存儲過程是繼續這個過程的最好方式,但我從來沒有在MySQL上使用存儲過程,也不知道最好的解決方法。我的其他(kludgy)選項是打兩次DB,首先得到給定的OrderId也有FormXId的所有項目,然後獲得所有的FormXId,並做一個動態的SELECT聲明,我做了類似僞代碼)

SELECT whatever FROM sometable WHERE FormXId=x OR FormXId=y.... 

顯然這是不太理想,但我真的不能相信任何其他方式......什麼都好,我可以做編程或建築?我的後端代碼是ASP.NET。

非常感謝!

UPDATE

爲了應對更多的信息請求:

樣品輸入:

OrderId = 1000 

樣本輸出

FormXs: 
----------------- 
FormXId | FieldA | FieldB | etc 
------------------------------- 
1003 | value | value | ... 
1020 | ... .. .. 
1234 | .. . .. . . ... 

你看到的問題是,FormX沒有一個單一的OrderId,而是OrderId的集合。有時,來自同一訂單的多個項目在FormX上,有時只有一個,大多數訂單在FormX上沒有任何項目。但是當有人拉起他們的訂單時,我需要他們的物品所屬的所有FormX來顯示,以便他們可以被修改/查看。

我正在考慮創建一個存儲過程,它可以完成我上面所說的操作,運行一個查詢來取消所有相關的OrderId,然後再返回相應的FormX。但必須有更好的方法...

+0

@omg小馬 - 我更新了我的問題... PLZ告訴我,如果你需要更多。謝謝! :) – Jason 2010-03-02 03:47:17

回答

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替換爲執行查詢的實際訂單號。

+0

杜。謝謝你讓我感到愚蠢。 :) – Jason 2010-03-03 05:41:15

相關問題