2014-02-28 69 views
1

我試圖編寫一個搜索函數,並且正在使用多個下拉列表作爲搜索條件。傳遞參數中帶空白的SQL選擇語句

我有一個像

SELECT * FROM TABLE WHERE OFFICE='$office', NAME='$name', DEPARTMENT='$department'; 

有時我想與特定的「名稱」,但沒有談論「部門」和「辦公室」來搜索的SQL語句。但是,當我將空白''傳遞給'$ office'和'$ department'時,它只會返回沒有辦公室和部門的人員。無論如何要克服它嗎?

我試圖使用'%'而不是空白,但它沒有工作。 我使用php和MSSQL進行編碼。

由於提前

+0

這個SQL中的任何一個?我認爲它應該是'WHERE OFFICE ='$ office'和NAME ='$ name''。 – SaidbakR

回答

2

如果你想用通配符來工作,你不需要=,但LIKE。如果此查詢工作不確定,但嘗試:

SELECT * FROM TABLE WHERE OFFICE LIKE '$office', NAME LIKE '$name', DEPARTMENT LIKE '$department'; 

現在,你只需要檢查該字段爲空,如果是,具有%替換它。正如我所說,我不確定。我目前沒有數據庫可用於測試。

0

爲實現這一點,你必須寫一些PHP代碼像

$sql = "SELECT * FROM TABLE WHERE"; 
if(isset($office)){ 
    $sql .= "OFFICE='$office',"; 
} 
if(isset($name)){ 
    $sql .= " NAME='$name',"; 
} 

if(isset($department)){ 
    $sql .= " DEPARTMENT='$department'"; 
} 
+0

不用你不必。 MySQL本身非常強大。如果你試圖歸檔一些複雜的東西,那麼它會變得非常隱祕,所以大多數人避免寫長的查詢。但其強大如地獄。 –

0

您可以輕鬆地做到這一點如下:

if(isset($office) && isset($department)){ 
    $sql = "SELECT * FROM TABLE WHERE OFFICE='$office', NAME='$name', DEPARTMENT='$department'"; 
} 
else{ 
    $sql = "SELECT * FROM TABLE WHERE NAME LIKE '$name'"; 
} 

mysql_query($connection, $sql); 
莫非
+0

第二個'$ sql'後面的字符串分隔符丟失。 –

+0

謝謝並修復。 – WebDevRon