2012-07-22 130 views
2

我正嘗試創建具有多標準字段的搜索系統。 我的問題是如何處理空標準字段(用戶省略),當你用EXACT字搜索時,不僅僅是類似(LIKE)。搜索 - 空標準字段

代碼:

$prva = mysql_real_escape_string($_POST["crit1"]); 
$druga = mysql_real_escape_string($_POST["crit2"]); 
$tretja = mysql_real_escape_string($_POST["crit3"]); 
$cetrta = mysql_real_escape_string($_POST["crit4"]); 

$query = mysql_query("SELECT pointID FROM bpoint WHERE 
(sName LIKE '%$prva%') AND 
(sAddr LIKE '%$druga%') AND 
(placeID LIKE '%$tretja%') AND 
(sPhone = '$cetrta') 
"); 

有人建議這一點,但我不明白它是如何工作的:

WHERE 
([email protected] or @col1 is null) and 
([email protected] or @col2 is null) and 
([email protected] or @col3 is null) and 
. 
. 

謝謝:)

+0

你有沒有試過他的建議?可能的作品 – codingbiz 2012-07-22 14:28:27

回答

2
$query="SELECT pointID FROM bpoint WHERE "; 

if(isset($_POST['condition1'])) 
$condition[]="name='somename'"; 


if(isset($_POST['condition2'])) 
$condition[]="address='someaddress'"; 

//More condition here 

if(!empty($condition)) 
$query .= implode(' AND ',$condition); 

mysql_query($query) 
1

的建議是一樣的寫以下查詢:

SELECT 
    pointID 
FROM 
    bpoint 
WHERE 
    (sName = '$prva' or sName is null) 
    AND (sAddr = '$druga' or aAdds is null) 
    AND (placeID = '$tretja' or placeID is null) 
    AND (sPhone = '$cetrta' or sPhone is null) 

這基本上是查詢您的返回數據中的EXACT匹配,除非您正在搜索的列爲空。這將工作得很好 - 除非你有所有搜索字段爲空的記錄,在這種情況下,它將返回其中的每一個。

+0

我的情況是IF應用程序輸入字段被留空而不是表格行...我的問題可能有點不清楚。 – John 2012-07-22 16:03:39

1
[email protected] or @col1 is null 
    ^^^    ^^^^^ 
here it will check  here here check that col1 is null 
that col1 is equal 
to col1 

> 因爲有OR條件,那麼只能拖狀態,要麼山坳爲空(或指定)或東西,所以,如果有什麼事情存在,則取否則將返回null在這裏,它會檢查每一個其中一個(每一個將返回)

+0

我的情況是IF應用程序輸入字段留空了不是錶行...我的問題可能有點不清楚。 – John 2012-07-22 16:03:22