我創建了一組搜索窗格,允許用戶在提交查詢後調整其結果集。我們從結果中拉出某些領域的常見值,並按照它們的流行度來顯示它們 - 你們都在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;
}
是否有充分的理由這樣做呢?或者是否有更好的選擇?也許是臨時桌子?任何想法非常感謝!
我使用一個類似的系統與所有的標準進入第一個查詢...即任何可能是一個過濾器,不是初始查詢的一部分是在同一個一段代碼,並在動態構建查詢時得到處理(或未處理)。正如你所說,讓分頁更容易,並保持在一個地方。 – Tom 2010-03-19 04:08:28
謝謝湯姆!如果它是活的,我很樂意看看... – cantlin 2010-03-19 11:06:29