2011-11-28 129 views
0

我工作了面導航PHP導航(我認爲這是正確的表達......)有過濾器

所以我有很多的類別和製造商在其上用戶可以過濾的。

我來到了我必須從我的數據庫中獲取篩選結果的地步。創建這些查詢的最快方法是什麼?我有3個可以過濾的值(製造商/公司/類別),這意味着我會爲製造商&公司是一個有源過濾器以及類別和公司等等寫一個查詢...我看到這個工作有多少是,我不知道是否有一個簡短的方法來做到這一點?

回答

1

最簡單的解決辦法可能是一個在那裏你建立動態查詢:

// GET SANITIZED $manufacturer $company $category 

// Initialize the array 
$facets = array(); 

if (isset($manufacturer)) 
{ 
    $facets[] = "manufacturer = '$manufacturer'"; 
} 

if (isset($company)) 
{ 
    $facets[] = "company = '$company'"; 
} 

if (isset($category)) 
{ 
    $facets[] = "category = '$category'"; 
} 

$query = "SELECT * FROM table"; 

if (count($facets) > 0) 
{ 
    $query .= " WHERE" . implode(" AND ", $facets); 
} 

您的查詢只會過濾設置的那些構面。

爲了使它稍微一般:

// GET SANITIZED $manufacturer $company $category 

// Initialize the array 
$facets["manufacturer"] = $manufacturer; 
$facets["company"] = $company; 
$facets["category"] = $category; 
// ADD MORE AS NECESSARY 

foreach($facets as $key=>$value) 
{ 
    if ($value != '') 
    { 
    $where[] = "$key = '$value'"; 
    } 
} 

$query = "SELECT * FROM table"; 

if (count($where) > 0) 
{ 
    $query .= " WHERE" . implode(" AND ", $where); 
} 
+0

這很好。非常感謝! 這似乎很容易,但我無法弄清楚。使用內爆功能沒有出現在我的腦海裏。謝謝 – kendepelchin

+1

我很高興它有幫助。 PHP擅長數組。你應該儘可能地使用數組。 –

2

可能要像下面(如果我正確地理解你的問題:

SELECT * FROM tablename WHERE manufacturer='A' AND company='B' AND category='C'

如果你使用PHP,你可以用它來放電流值在A,B和C - 但記得要清理這些值

編輯

例如,PHP ...

<?php 
    $manufacturer = mysql_real_escape_string($_GET['manufacturer']); 
    $company = mysql_real_escape_string($_GET['company']); 
    $category = mysql_real_escape_string($_GET['category']); 

    $query = "SELECT * FROM tablename WHERE manufacturer='".$manufacturer."' AND company='".$company."' AND category='".$category."'"; 

    // then simply run the query.... 
?> 

編輯2

您可以更改爲OR需要時

<?php 
    $query = "SELECT * FROM tablename"; 
    $mixed_query = ""; 

    if(isset($_GET['manufacturer']) && !empty($_GET['manufacturer'])){ 
    $mixed_query .= ($mixed_query !== "") ? " AND " : " WHERE "; 
    $mixed_query .= "manufacturer='".mysql_real_escape_string($_GET['manufacturer'])."'"; 
    } 
    if(isset($_GET['company']) && !empty($_GET['company'])){ 
    $mixed_query .= ($mixed_query !== "") ? " AND " : " WHERE "; 
    $mixed_query .= "company='".mysql_real_escape_string($_GET['company'])."'"; 
    } 
    if(isset($_GET['category']) && !empty($_GET['category'])){ 
    $mixed_query .= ($mixed_query !== "") ? " AND " : " WHERE "; 
    $mixed_query .= "category='".mysql_real_escape_string($_GET['category'])."'"; 
    } 

    // then add to query 
    $query .= $mixed_query; 

    // then simply run the query.... 
?> 
+0

是的,這就是我想要的,但不是所有的值都填滿,所以用戶可以在任一製造商或公司或過濾器... 左右。我將不得不檢查每個條目是否存在於網址中,然後獲取產品。我認爲這有點浪費時間(如果我有20個用戶可以過濾的getvalues怎麼辦?) – kendepelchin

+1

看到我的編輯在一瞬間... – MrJ