我們有一個PHP/MySQL的應用程序,其中用戶可以創建自己的「數據庫」,它可以變得相當複雜。在MySQL,它的結構爲一組屬性表,與像record_id
,field_id
和field_value
列。我很清楚這種結構的優點和缺點,所以請考慮這一點不會改變。MySQL的自定義報表策略
我們已經有了一個自定義高級搜索系統,用戶可以通過在字段之間和之間使用布爾運算符,結合任何字段的條件來查詢這些數據庫。
現在我們必須實現報告功能,他們將能夠製作自己的報告。這可能包括一對多關係中的多組數據。
例如,考慮一個「人員」數據庫,其中每個人可能有多個聯繫人和多個地址。例如,通過我們的自定義搜索,很容易列出在美國出生的所有人。但我也想在結果集上顯示每個人的所有聯繫人和地址。
我可以看到兩個可能的解決方案:
單個SQL查詢與多個
JOIN
語句獲取的所有數據。在這種情況下,我可以有多個行的每個人根據自己有多少聯繫人和地址有,我不得不應付,關於PHP循環顯示(或組織)的結果。我擔心這會變得太複雜,因爲報告可能會有無限數量的一到多個信息塊(在我的示例中,我只有兩個地址和聯繫人)。對於每個人,運行'n'個附加查詢,每個塊對應一個到多個數據。在我的例子中,這將是聯繫人的一個查詢,另一個是地址。這種方法會導致運行大量的查詢來構建整個報表。
我知道這兩種方法都有其缺點,但是有沒有一種「推薦」方式可以解決這種情況?
即使是在MySQL的?我的經驗是,MS SQL Server很好地處理了很多連接的大型查詢,但是MySQL看起來效率並不高。 – bfavaretto 2012-02-08 15:13:54
當涉及到大型連接時,MySQL非常高效。我無法對您的具體情況發表評論,但有時它可以幫助您爲要加入記錄的列創建索引。這在某些情況下可以大大提高性能。 – Dan 2012-02-08 15:16:46
我已經有幾個指標,但我猜DB結構是實際的瓶頸在這裏(和,正如我所說,我不能在這一點上改變它)。我會嘗試你的建議,我避免它,因爲我仍然無法弄清楚PHP循環所需的邏輯。 – bfavaretto 2012-02-08 15:23:30