MySQL - 如果输入为空,则返回所有值

时间:2017-08-02 11:40:51

标签: php html mysql

我正在为网站创建一个高级搜索功能,它几乎完成了,我只有一个主要问题。 我匹配这样的房间:

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 ."";`

4 个答案:

答案 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";