我正在尝试使用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
.
.
谢谢:)
答案 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这里它将检查它们中的每一个(每个单身将返回)