2012-07-22 92 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