我正在为网站创建一个高级搜索功能,它几乎完成了,我只有一个主要问题。 我匹配这样的房间:
AND Rooms=" .$_SESSION["room"] ."
并尝试了这个:
AND (Rooms=" .$_SESSION["room"] ." OR Rooms IS NULL)
但问题是如果用户没有在房间输入中插入任何值,它将不会显示任何空间。如果在房间输入中插入“8”,如果没有匹配则使用IS NULL代码,它将显示来自DB的所有值。 我不想根据需要进行输入。
我只需要一个带有mysql的解决方案,当字段为空时返回所有值而不使用它:
if ($_SESSION["room"]==NULL) {}
else{}
完整查询:
`SELECT * FROM secret WHERE secretIDName='1' AND NatureTypeIDName LIKE '%" .$_SESSION["nature"] ."%' AND (NettArea>="
.$_SESSION["NettArea"] ." OR NettArea IS NULL) AND ConditionTypeIDName LIKE'%" .$_SESSION["lifestyle"]
."%' AND ((SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',4),'|',-1)>="
.$_SESSION["BusinessTypeValuesMin"]
." AND SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',4),'|',-1)<="
.$_SESSION["BusinessTypeValuesMax"]
.") OR SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',4),'|',-1) = '') AND (SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',2),'|',-1)='"
.$_SESSION["BusinessTypeValuesType"]
."' OR SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',2),'|',-1)='') AND GarageArea>="
.$_SESSION["GarageArea"]
." AND (LocationIDName LIKE '%"
.$_SESSION["zone1"]
."%' AND LocationIDName LIKE '%"
.$_SESSION["zone2"]
."%' AND LocationIDName LIKE '%"
.$_SESSION["zone3"]
."%') AND (Rooms="
.$_SESSION["room"]
.") LIMIT "
.($page-1)*$Page
.", " .$Page ."";`
答案 0 :(得分:2)
您可以创建这样的条件(我假设&#34;房间&#34;是代表房间数的数字?):
AND (Rooms = ".(int)$_SESSION['room']." OR ".(int)$_SESSION['room']." = 0)
如果$_SESSION['room']
为空(用户没有指定的房间数),那么
AND (Rooms = 0 OR 0 = 0)
...总是TRUE
,所以&#34;房间&#34;条件根本不适用。如果用户指定了房间数,则查询将如下所示:
AND (Rooms = 8 OR 8 = 0)
8 = 0
总是FALSE
,因此,您有条件:Rooms = 8
。
答案 1 :(得分:0)
在查询中,检查NULL与检查空是否相同。我推荐以下内容:
AND (Rooms=" .$_SESSION["room"] ." OR Rooms IS NULL OR Rooms <>'')
此外,强烈建议在将$_SESSION
变量注入MySQL
之前对其进行过滤,如果它是一个数字,请将其分配给$room=(int)$_SESSION['room']
以强制它是一个整数。
答案 2 :(得分:0)
有几种解决方案,其中一种只是将SQL存储在字符串变量中,然后在值不为空时添加房间条件。
$ sql = SELECT ...
if ($_SESSION["room"] !== NULL) {
$sql = $sql . ' AND Rooms=".$_SESSION["room"] . " '
}
答案 3 :(得分:0)
尝试这样的查询:注意我将所有php varibles与{}连接而不是“..”
SELECT * FROM secret WHERE secretIDName='1' AND NatureTypeIDName LIKE '%{$_SESSION["nature"]}%' AND (NettArea >={$_SESSION["NettArea"]} OR NettArea IS NULL) AND ConditionTypeIDName LIKE'%{$_SESSION["lifestyle"]}%' AND ((SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',4),'|',-1)>={$_SESSION["BusinessTypeValuesMin"]} AND SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',4),'|',-1)<={$_SESSION["BusinessTypeValuesMax"]}) OR SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',4),'|',-1) = '') AND (SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',2),'|',-1)='{$_SESSION["BusinessTypeValuesType"]}' OR SUBSTRING_INDEX(SUBSTRING_INDEX(BusinessTypeValues,'|',2),'|',-1)='') AND GarageArea>={$_SESSION["GarageArea"]} AND (LocationIDName LIKE '%{$_SESSION["zone1"]}%' AND LocationIDName LIKE '%{$_SESSION["zone2"]}%' AND LocationIDName LIKE '%{$_SESSION["zone3"]}%') AND (Rooms={$_SESSION["room"]}) LIMIT ($page-1)*$Page, $Page";