Php 我的SQL语句有什么问题?
我正在做一个网站,用户可以选择一个租赁财产,有两个领域,他们可以选择,家具和宠物。两个选择框中的选项分别为是和否Php 我的SQL语句有什么问题?,php,mysql,html,Php,Mysql,Html,我正在做一个网站,用户可以选择一个租赁财产,有两个领域,他们可以选择,家具和宠物。两个选择框中的选项分别为是和否 <select name="furnished"> <option value=""> <option value="yes">Yes</option> <option value="no">No</option> </select> <select name="pets">
<select name="furnished">
<option value="">
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
<select name="pets">
<option value="">
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
如果用户选择“是”表示已提供,我希望它显示已提供(是)或部分提供(部分)的所有属性。如果用户选择“否”,我希望它显示所有未提供(否)或具有特殊说明(说明)的属性
如果用户为宠物选择“是”,我希望它显示允许所有宠物(是)、只允许猫(猫)或只允许狗(狗)的所有属性。如果用户选择“否”,我希望它显示所有不允许宠物(否)或具有特殊说明(说明)的属性
例如,如果用户在“提供的”上选择“是”,在“宠物”上选择“是”,则这是输出的SQL语句:
SELECT * FROM properties
WHERE num_bedrooms >= 1
AND num_bathrooms >= 1
AND furnished = "yes" OR furnished = "partially"
AND pets = "yes" OR pets = "cats" OR pets = "dogs"
问题是,它当前将返回满足where子句中提供的或pets要求的结果,而我需要它返回满足where子句中提供的和pets要求的结果
因此,它当前将返回一个结果,该结果显示“家具”设置为“是”,而“宠物”设置为“否”。
如何让它返回所有结果,并将“已提供”设置为“是”,将“宠物”设置为“是”
我的SQL语句有什么问题吗?把各种
或'd语句放在旁边
$sql .= ' AND (furnished = "yes" OR furnished = "partially")';
$sql .= ' AND (pets = "yes" OR pets = "cats" OR pets = "dogs")';
等等。和
在运算符优先级中位于或
之前,因此您的查询如下
SELECT * FROM properties
WHERE
(num_bedrooms >= 1 AND num_bathrooms >= 1 AND furnished = "yes")
OR (furnished = "partially" AND pets = "yes")
OR pets = "cats"
OR pets = "dogs"
这和你想象的不太一样。试一试
SELECT * FROM properties
WHERE num_bedrooms >= 1
AND num_bathrooms >= 1
AND (furnished = "yes" OR furnished = "partially")
AND (pets = "yes" OR pets = "cats" OR pets = "dogs")
甚至更好
SELECT * FROM properties
WHERE num_bedrooms >= 1
AND num_bathrooms >= 1
AND furnished IN ("yes", "partially")
AND pets IN ("yes", "cats", "dogs")
你不应该做SELECT*
尝试命名你需要的列 您没有像应该的那样转义输入变量。看看数据库库中使用的转义/引用方法…非常感谢您的帮助!为什么我不选择*很重要?我有很多列需要为每个属性返回,所以我不认为把它们全部写出来有什么意义。除非你真的需要所有的列,*将导致php和mysql之间不必要的通信开销(内存和cpu白白浪费)。(除其他原因外……)
SELECT * FROM properties
WHERE num_bedrooms >= 1
AND num_bathrooms >= 1
AND furnished IN ("yes", "partially")
AND pets IN ("yes", "cats", "dogs")