我工作了面導航PHP導航(我認爲這是正確的表達......)有過濾器
所以我有很多的類別和製造商在其上用戶可以過濾的。
我來到了我必須從我的數據庫中獲取篩選結果的地步。創建這些查詢的最快方法是什麼?我有3個可以過濾的值(製造商/公司/類別),這意味着我會爲製造商&公司是一個有源過濾器以及類別和公司等等寫一個查詢...我看到這個工作有多少是,我不知道是否有一個簡短的方法來做到這一點?
我工作了面導航PHP導航(我認爲這是正確的表達......)有過濾器
所以我有很多的類別和製造商在其上用戶可以過濾的。
我來到了我必須從我的數據庫中獲取篩選結果的地步。創建這些查詢的最快方法是什麼?我有3個可以過濾的值(製造商/公司/類別),這意味着我會爲製造商&公司是一個有源過濾器以及類別和公司等等寫一個查詢...我看到這個工作有多少是,我不知道是否有一個簡短的方法來做到這一點?
最簡單的解決辦法可能是一個在那裏你建立動態查詢:
// 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);
}
可能要像下面(如果我正確地理解你的問題:
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....
?>
是的,這就是我想要的,但不是所有的值都填滿,所以用戶可以在任一製造商或公司或過濾器... 左右。我將不得不檢查每個條目是否存在於網址中,然後獲取產品。我認爲這有點浪費時間(如果我有20個用戶可以過濾的getvalues怎麼辦?) – kendepelchin
看到我的編輯在一瞬間... – MrJ
這很好。非常感謝! 這似乎很容易,但我無法弄清楚。使用內爆功能沒有出現在我的腦海裏。謝謝 – kendepelchin
我很高興它有幫助。 PHP擅長數組。你應該儘可能地使用數組。 –