2012-09-26 122 views
1

我想用多個過濾器獲取內容,現在只有一個。 例如:在mysql中使用php數組查詢

SELECT * FROM表1 WHERE狀態=真和類別= '攝像頭' AND 模型= '三星' 和Type = '新'

我想創建一個數組它。但因爲我在這個新手沒有領先。

function getAllRequests($filter){ 
if(empty($filter)){ 
    $addfilter = '';  
    }else{ 
    $addfilter = 'AND cat_id=' . $filter; 
    } 
} 

$sql = 'SELECT * FROM Table1 WHERE status=true' . $filter; 

任何幫助將不勝感激。

回答

1

這將讓你更接近的解決方案,但它不會取代查詢,這肯定會是錯誤的cat_id - 雖然不可能做太多多無陣列結構:

function getAllRequests($filter) 
{ 
    $addfilter=""; 
    if(!empty($filter)) 
    { 
     foreach($filter as $val) 
     { 
      $addfilter. = ' AND cat_id=' . $val .'\''; 
     } 
    } 
    return $addFilter; 
} 

$myFilters=getAllRequests($filter); 
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters; 

在另一方面,如果你的陣列的方式strucutred這樣的:

array{ category => camera, model => samsung); // etc 

,你可以使用以下命令:

function getAllRequests($filter) 
{ 
    $addfilter=""; 
    if(!empty($filter)) 
    { 
     foreach($filter as $key => $val) 
     { 
      $addfilter. = " AND `$key` = '$val'"; 
     } 
    } 
    return $addFilter; 
} 

$myFilters=getAllRequests($filter); 
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters; 

編輯:您可以通過以下方式所有的過濾循環:

function getAllRequests() 
{ 
    $addfilter=""; 
    if(!empty($_REQUEST)) 
    { 
    foreach($_REQUEST as $key => $val) 
    { 
     $addfilter. = " AND `$key` = '$val'"; 
    } 
    } 
    return $addFilter; 
} 

$myFilters=getAllRequests(); 
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters; 

你並不需要通過$_REQUEST(這將爲工作GET和POST),因爲它已經是一個超全局。

+0

@ Fluffeh-像你的想法,你可以幫我從我的網址創建一個數組?因爲我所有的過濾器都在url示例中:get.php?type = car&year = 2012&color = black ...thx – Dan

+0

@丹我彈出一個編輯,我認爲它應該爲你工作。 – Fluffeh

0

您可以使用另一種使用可選參數的方法,它會使您的WHERE子句按您的需要動態變化。在這種方法中,你直接傳遞所有的參數值,SQL查詢看起來應該像這樣:

SELECT * 
FROM Table1 
WHERE 1 = 1 
    AND (@status IS NULL OR status = @statusParam) 
    AND (@category IS NULL OR category = @categoryParam) 
    AND (@model IS NULL OR model = @modelParam) 
    AND (@type  IS NULL OR type  = @typeParam) 

然後如果任何參數@statusParam@categoryParam@modelParam@typeParam傳遞給查詢與NULL價值觀,那麼與保留該值的列進行比較將被忽略。我使用了謂詞1 = 1,以防萬一在所有WHERE子句中所有NULL值都傳遞給查詢的所有值將被忽略,因爲它將不會顯示,因爲WHERE 1 = 1總是如此,它將會像SELECT * FROM Table1一樣。

0

使用本

function getAllRequests($filter){ 
    if(empty($filter)){ 
     $addfilter = '';  
    }else{ 
     $addfilter .= 'AND cat_id=' . $filter; 
    } 
    return $addfilter; 
} 

$sql = 'SELECT * FROM Table1 WHERE status=true' . getAllRequests($filter); 
0

當發送陣列確保它通過它的索引

$conditions = array('category' => 'Camera', 'model' => 'Samsung' , 'type' => 'New') 

現在循環。在其他條件

foreach($conditions as $key =>$value){ 

    $addfilter .= 'AND ' . $key . ' = ' . $value; 

} 
1
function getAllRequests($filter){ 
if(empty($filter)){ 
$addfilter = '';  
}else{ 
$addfilter = 'AND cat_id=' . $filter; 
} 
} 

$ SQL = 'SELECT * FROM表1 WHERE狀態=真'。 $ addfilter;