我正在尝试为我的网站创建过滤功能。有人告诉我用SELECT DISTICT
来完成这个任务。下面是我目前所拥有的,它检索列STATE中的所有不同值并将它们显示为复选框,以便用户可以检查他想要在页面上的表上显示的状态。
$sql = "SELECT DISTINCT state FROM allproperties";
$result = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($result)) {
echo "<input type='checkbox' name='state' value='" . $row[0] . "'>" . $row[0] . "<br>";
}
我的问题是这个过滤器功能有很多条件,不仅仅是选择要显示的状态,还有哪个县,成员年龄,成员贡献蚀刻的选择。当用户单击DISPLAY按钮显示筛选结果时,我不知道如何为此构建SQL查询。如果只有几个条件,我可以简单地使用&#34; SELECT * WHERE(...)AND(....)&#34;但是如果我将它用于过滤器功能,那么就会遇到很多条件:
WHERE (state='CA' OR state='NV' OR state='WA' ..... so on and so fort)
有没有办法像WHERE state=OR('CA','NV','WA')
这样做,所以我没有这么多state=
?
此外,是否有人对过滤器功能有任何示例查询?过滤器功能就像您在音乐网站中搜索基于流派或其他内容的歌曲一样。我提前为这个令人困惑的问题道歉,我无法找到正确的问题要求。
答案 0 :(得分:5)
是的,您可以使用IN()
:
WHERE state IN('CA','NV','WA'...)
它不仅具有同样的效果,而且比几个OR
更有效率,总是尽量避免不必要的OR
。
如@Kulvar所述,您可以使用implode()
使其与PHP一起使用,例如:
'WHERE state IN(' . implode(',', $states) . ')'