2010-01-24 16 views
3

我在寫一個php-mysql應用程序。該應用程序允許用戶針對數據庫運行搜索。當搜索運行時,如果用戶點擊後退按鈕在檢查由它提出的項目後回到它,他們被詢問他們是否想重新發送查詢(它使用後期)。這將重新運行數據庫中的搜索。使用get不會導致請求重新發布 - 但它仍然會再次運行搜索。PhP/MySQL存儲頁面之間的用戶搜索,以便用戶可以回到他們

是否有存儲搜索和調用它的方式,與出在數據庫中重新運行呢?與會議也許 -

這可以在數據庫在PHP保存,或以某種方式?這些搜索可能會有很多數據,我覺得對於會話來說可能太多了。

我可以想象的另一種方式是將其存儲在數據庫中某種臨時表中。用我打算查詢的列創建表,然後選擇插入。然後從表格中選擇*。這似乎也是一個糟糕的主意。許多動態創建的臨時表在四周浮動。

我知道這可以做到。保存的搜索是您在許多Web應用程序中看到的內容。那麼通常如何完成?

+0

這個問題可能也讓你感興趣:http://stackoverflow.com/questions/2020344/smart-database-cache – 2010-01-24 06:02:48

回答

2

memcached

APC

然而,我注意到,你不給,爲什麼要緩存搜索結果的任何原因。 「因爲速度更快,而且我讀到它讓我的應用更具可擴展性」,這是通常的原因。這聽起來像不成熟的優化。

我建議您構建您的應用程序並對其進行配置。這些「搜索」是多麼昂貴? 爲什麼他們昂貴?這是不好的模式設計?索引很差嗎?存儲引擎選擇不好嗎?

你知道MySQL有一個query cache,對吧?在許多情況下,這可能是你需要的。嘗試使用mysql客戶端運行一個昂貴的「搜索」查詢,並記下時間,然後再運行一次。看到?

+0

我真的不知道MySQL有一個查詢緩存。我正在教自己的php和mysql。很高興知道,我會嘗試一下,看看它是如何做到的。 – 2010-01-24 13:47:37

+0

對不起,接受延遲,花了一段時間,我來試試這個。 – 2010-01-29 20:45:06

2

修復「你想重新提交」的錯誤,你可以存儲在會話或數據庫請求,然後立即重定向到一個新的頁面,以實際執行搜索:

search.php?searchId=22 

if (isset($_GET['searchId'])) { 
    $search = $_SESSION['search'][$_GET['searchId']; 
    // do search 
} elseif (isset($_POST['search'])) { 
    $_SESSION['search'][] = $_POST; 
    header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1); 
} 

,然後可以抓住從$ _SESSION查詢框[「搜索」] [22]或DB ...

爲保存結果,你可以依靠瀏覽器的緩存,也可以存儲在個人養老金計劃會話或數據庫...如果需要,在某個時間點結束舊的...

cr吃結果表是好的(並且可以加快複雜搜索的分頁速度),但是你可能會有數百萬的點擊量,所以對緩存進行分頁將是更通用的方式。

如果用戶想要返回到搜索幾天或幾周後

,你可以重新運行與保存的查詢字段搜索。

相關問題