2012-12-18 101 views
2

我無法弄清楚如何在包含MySQL查詢的PHP中處理if語句。這是我迄今(它是未完成):

$industry = $_GET['industry']; 
$location = $_GET['location']; 
$position = $_GET['position']; 
$region = $_GET['region']; 

if($industry=="any"){ 

} 

if($location=="any"){ 

} 

if($position=="any"){ 

} 

if($region=="any"){ 

} 

$sql_cat = " 
SELECT * 
FROM jobs 
WHERE industry_cat='$industry' && location_cat='$location' && position_cat='$position' && region_cat='$region' 
ORDER BY id DESC 
"; 
$result_cat = $mysqli->query($sql_cat); 
$num_rows_cat = mysqli_num_rows($result_cat); 

基本上,我想說的是,如果任何變量被設置爲「任何」,那麼我想這些變量來表示一切準備(每個變量的形式有五個可能性)。我想我會在where子句中使用數組(如WHERE行業IN($ industry)),但如果有人真的選擇了一個變量,那麼它將不起作用。

我可能有點偏離軌道,但我無法繞過它。任何幫助將不勝感激。謝謝!

+0

子句可以請你提供一些你真正想要的 –

+0

你是什麼變量的詳細信息(你說的五種可能性)? – Sithu

+0

這只是一個人們提交的搜索表單,當我查詢數據庫時,有一個'any'選項可以代表該變量的所有可能性。那有意義嗎? – MillerMedia

回答

4

如果我沒有誤解你的問題,我會這樣做。

$sql = "SELECT * FROM jobs WHERE 1"; 
if($industry !== "any"){ 
    $sql .= " AND industry_cat = '$industry'" 
} 
if($location !== "any"){ 
    $sql .= " AND location_cat = '$location'" 
} 
if($position !== "any"){ 
    $sql .= " AND position_cat = '$position'" 
} 
if($region !== "any"){ 
    $sql .= " AND region_cat = '$region'" 
} 
$sql .= " ORDER BY id DESC" 
$result = $mysqli->query($sql); 

如果你確信它們是整數,您可以刪除圍繞在查詢中的變量單引號。

+0

現在,讓我們假設有人在其中一個實際上選擇了「any」以外的其他東西,它是否仍然會顯示該變量? – MillerMedia

+0

工作正常!謝謝! – MillerMedia

+0

@MxmastaMills,如果選擇661行業,例如,第一個條件將通過向查詢添加一個條件AND industry_cat ='661'來解決此問題。請注意,您可以使用'!='而不是'!=='。後者是完全匹配,包括數據類型。你可以試試:) – Sithu

0

建立你在那裏逐漸

$industry = $_GET['industry']; 
$location = $_GET['location']; 
$position = $_GET['position']; 
$region = $_GET['region']; 

if($industry!="any"){ 
    $where[] = 'industry_cat=?'; 
    $where_args[] = $industry; 
} 

if($location!="any"){ 
    $where[] = 'location_cat=?'; 
    $where_args[] = $location; 
} 

if($position!="any"){ 
    $where[] = 'position_cat=?'; 
    $where_args[] = $position; 
} 

if($region!="any"){ 
    $where[] = 'region_cat=?'; 
    $where_args[] = $region; 
} 

$where_clause = implode(' and ', $where); 

$sql_cat = " 
SELECT * 
FROM jobs 
where $whereclause 
ORDER BY id DESC 
"; 
$stmt = $mysqli->prepare($sql_cat);