搜索 - 空标准字段

时间:2012-07-22 14:24:54

标签: php mysql search

我正在尝试使用mutliple条件字段创建搜索系统。 我的问题是当你用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
(col1=@col1 or @col1 is null) and
(col2=@col2 or @col2 is null) and
(col3=@col3 or @col3 is null) and
.
.

谢谢:)

3 个答案:

答案 0 :(得分: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 :(得分: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匹配,除非您搜索的列为null。这将非常有效 - 除非您有所有搜索字段为空的记录,在这种情况下它将返回它们中的每一个。

答案 2 :(得分:1)

col1=@col1 or @col1 is null
     ^^^              ^^^^^
here it will check     here here check that col1 is null
that col1 is equal
to col1  

> 因为存在OR条件,所以只有两个条件,即col是空的(或指定的)或类似的东西,如果有任何存在然后获取其他它将返回null这里它将检查它们中的每一个(每个单身将返回)