2011-11-24 70 views
3

我正在開始一個新項目,而我即將採取最重要的設計決策。什麼是進行動態查詢(使用PHP + MySQL)的最佳方法?

我將與PHP一起創建動態查詢。 (我想爲用戶提供一些類似於MS Excel中的動態表格)。

我有25個表,每個約有4-6列,我將加入取決於用戶選擇(大多數操作將計算AVG,SUM,COUNT等,這取決於某些值的過濾器可能是5到6桌加入)。

我正在思考所有這些JOINS和SELECTS以及GROUP BY,但它看起來將會非常複雜,所以我開始考慮使用視圖來降低動態代碼的複雜性建立查詢。

我還想過在查詢中避免使用GROUPS BY,並在代碼中使用循環和數組計算聚合函數。

我想知道你會推薦哪些方法,或者如果你有任何消化或提示將不勝感激。

+0

這個問題很小很難回答。您在網絡應用程序中執行的大多數查詢都是動態的。 '''SELECT * FROM user u WHERE u.id = {id}'''是一個動態查詢的例子。你想使用框架?或者你所建立的一切都是自定義的?你想使用ORM嗎?你會使用PDO或基本的mysql_query,mysql_connect等功能嗎?你有什麼類型的桌子? – Flukey

+0

那麼,你的問題是什麼?我認爲你不應該試圖爲每種可能的組合提供意見(對於很多工作),也不應該使用PHP來計算值。 MySQL會更快(查詢優化,緩存和PHP不快)。 –

+0

@BenediktOlek - 通過正確的代碼優化,硬件和工具PHP很快。但同意,如果您遍歷數千個項目的數組來構建動態查詢,那麼它不會是最好的方法... – Flukey

回答

1

唯一有效的答案是爲此創建自己的框架。我已經完成了很多次。你想要的東西看起來或多或少像一個複雜的報表生成器,它可以即時生成報表,但是你想創建一個複雜的查詢生成器,併爲客戶提供可視化的輔助工具。

我要做的第一件事就是使用表示每個表的模型,並提供描述表字段的機制,以便向用戶顯示字段。然後在你的模型中創建一個鏈接機制,說:如果我鏈接這張表和這張表,我應該使用什麼JOIN。

讓您的用戶選擇要使用的模型,然後使用您的模型爲您創建查詢。它實際上運行良好,但需要相當一段時間才能完成。

祝你好運

+2

有很多ORM,你不認爲提問者應該將他的代碼放在其中的一個上嗎?重新騎自行車可能不是他想要的。 – dmitry

+0

我從來沒有見過讓我輕鬆做到這一點的ORM。你可能是對的,我只是在回答:) –

相關問題