2010-01-11 76 views
1

我正在構建一個使用PHP 5,MySQL 5和Javascript與jQuery和AJAX的Web應用程序。一步一步查詢MySQL數據庫 - 最佳方法?

該應用程序是一個非常複雜的選擇過程,具有多個下拉菜單,用戶可以按任意順序進行選擇。每個下拉菜單中的選擇都會給出更多選擇標準,這將限制其他下拉菜單中的選擇,並最終提供有限的結果集。

我在客戶端使用Javascript與服務器和MySQL數據庫連接到PHP的AJAX,想法是,每次用戶從下拉選擇的東西我發送一個AJAX請求來更新所有其他下拉。當所有可能的參數被設定後,結果將被顯示出來。

(我也想保持邏輯在服務器端由於種種原因,爲此使用AJAX。)

現在,我不知道什麼是處理這種「迭代」的過程對每個用戶的最佳方式:

我有一個表,每個選擇結果的所有條件。由於每個下拉選擇將導致一組如果選擇標準,我可以存儲查詢字符串在服務器上添加到每個選擇。然後,我運行當前存儲的查詢字符串,找出每個下拉菜單應該進入的內容,將該數據發送給客戶端,然後在更多條件添加,運行,發送等等時存儲該查詢以供後續使用。 然後我必須將該查詢字符串存儲在每個用戶的服務器上,或許存儲在一個文本文件中。或者作爲一個存儲過程,請參見下面的內容....

另一種方法是在選擇完成後使用新條件運行查詢,發送數據以更新下拉列表,然後將選擇存儲在臨時表,我運行下一個查詢等等等等。所以臨時表將收縮每個選擇,直到我呈現結果。

應用程序可以有多個用戶在同一時間工作,所以必須通過可能的Cookie /會話ID以某種方式識別用戶....(?)

而存儲的查詢或臨時表後,必須消失有些時候每個用戶都離開了......怎麼樣?

篩選方法,以添加越來越多的標準來選擇從表中,允許進行選擇複雜的計算:

  • 使用連接

  • 使用正受到越來越多的限制臨時表因爲添加新標準時會刪除記錄。

  • 使用子選擇。

儲藏方法,以保持軌道上爲每個用戶在每個步驟之間:

  • 在一個服務器上的文件存儲參數,並將其插入到SQL或存儲過程中的每個選擇步驟,做一個新的查詢每個步驟的整個數據庫,但每次都添加更多標準。

  • 在一個文件中存儲一個sql查詢,並將其擴展爲每個步驟....

  • 存儲在表/場中的SQL查詢.....

  • 存儲在存儲過程中的SQL查詢.....

  • 商店的實際限制結果集的前面對於模板表中每個用戶的選擇將越來越小,因爲每一步都會刪除越來越多的記錄。

  • 存儲會話期間在客戶端的參數,他們都重新發送到服務器的每個選擇

任何人都可以對這個決定幫助嗎?

RGDS PM

回答

1

,我會建議將每個在下拉框中的值由用戶更換的時間運行不同的查詢的最佳方法。如果你有5個下拉框,當用戶在第一箱變值,你從你的AJAX頁面運行查詢:

SELECT * FROM table WHERE val1 = x; 

然後,一旦用戶決定改變另一個值,你可以運行更多的收窄查詢,例如

SELECT * FROM table WHERE val1 = x AND val2 = y; 

然後你可以重複這個過程,直到所有的下拉框被改變。

至於使用臨時表或存儲過程。我想說這可能不是你想要達到的目標所必需的,而且很可能只是增加了項目的複雜性。

如果您知道需要從前端檢查哪些字段,那麼您應該將所選值從下拉框發送到AJAX頁面,以便它可以決定需要運行的查詢並返回結果(XML/JSON對此很有幫助)。

+0

謝謝!認爲我對自己有點過於複雜......只會跟蹤在客戶端使用/單擊哪些下拉菜單,然後在單擊一個下拉菜單時將這些內容發送到服務器端。然後,服務器可以執行一些操作,如SELECT * FROM table WHERE field1 = param1 AND Field2 = param2等可達15個。尚未解決的參數可以設置爲通配符,因此我可以始終使用相同的查詢字符串(我猜是? .... –