2010-03-19 103 views
0

我創建了一組搜索窗格,允許用戶在提交查詢後調整其結果集。我們從結果中拉出某些領域的常見值,並按照它們的流行度來顯示它們 - 你們都在eBay上看到過這種類型的東西。因此,如果我們的結果中有很多行是在2009年創建的,那麼我們將能夠點擊「2009」並僅查看該年創建的行。精煉搜索結果[PHP/MySQL]

你認爲什麼是應用這些過濾器最有效的方式?我工作的解決辦法是放棄從結果條目不匹配的額外的參數,如:

while($row = mysql_fetch_assoc($query)) { 
    foreach($_GET as $key => $val) { 
     if($val !== $row[$key]) { 
      continue 2; 
     } 
    } 
    // Output... 
} 

這種方法希望只查詢數據庫一次的效果,如添加的過濾器不會更改查詢 - MySQL可以緩存和重用一個數據集。不利的一面是分頁有點讓人頭疼。

明顯的替代辦法是構建任何附加條件到初始查詢,像:

$sql = "SELECT * FROM tbl MATCH (title, description) AGAINST ('$search_term')"; 
foreach($_GET as $key => $var) { 
    $sql .= " AND ".$key." = ".$var; 
} 

是否有充分的理由這樣做呢?或者是否有更好的選擇?也許是臨時桌子?任何想法非常感謝!

+0

我使用一個類似的系統與所有的標準進入第一個查詢...即任何可能是一個過濾器,不是初始查詢的一部分是在同一個一段代碼,並在動態構建查詢時得到處理(或未處理)。正如你所說,讓分頁更容易,並保持在一個地方。 – Tom 2010-03-19 04:08:28

+0

謝謝湯姆!如果它是活的,我很樂意看看... – cantlin 2010-03-19 11:06:29

回答

1

我會繼續並重新查詢數據庫,將所有內容放在一起並減少分頁噩夢。

你是通過AJAX做到這一點嗎?

+0

感謝您的回覆。理想情況下,我更喜歡使用AJAX的系統,但目前需要刷新頁面。 – cantlin 2010-03-19 11:11:41

1

正在使用的選項?

如果你正在做大量的查詢(我的意思是大),使用內存存儲引擎可以節省時間。 (雖然它會是一個小數額)

+0

有趣的建議。可能與我一樣小的操作過度,但它可以工作。謝謝! – cantlin 2010-03-19 11:36:45