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
(col1=@col1 or @col1 is null) and
(col2=@col2 or @col2 is null) and
(col3=@col3 or @col3 is null) and
.
.

谢谢 :)

4

3 回答 3

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)
于 2012-07-22T15:02:40.853 回答
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)

这基本上是在您返回的数据中查询精确匹配,除非您正在搜索的列为空。这会很好地工作 - 除非您有所有搜索字段都为空的记录,在这种情况下,它将返回其中的每一个。

于 2012-07-22T14:27:54.957 回答
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(或指定)或其他条件,如果存在任何内容,则 fetch else 它将在此处返回 null 它将检查其中的每一个(每一个都将返回)

于 2012-07-22T14:30:44.870 回答