我想在一个表中搜索适用于条件的行(在日期1和日期2之间,客户端id为"X",类别为"Y",发布名称为"Z")。
问题是我写的代码需要所有字段都存在,我想让用户能够用一两个条件进行搜索。
有谁能帮忙吗。。。。。
$DBObject->QueryText="SELECT * from printed WHERE
printed_cat_id=".$cat2["printed_cat_id"]."
and clientid=".$_SESSION["clientid"]."
and publication_id=".$_GET["pub"]."
and photo_tag like ".$tag."
and date BETWEEN '".$_GET["date1"]."' AND '".$_GET["date2"]."'";
在查询中,您可以测试字段是否为空。
字段"pub"示例:
and (".$_GET["pub"]." is null || publication_id=".$_GET["pub"]." )
然后,如果pub为空,它就不会被考虑在内。如果需要,也可以测试"。
由于您想使某些条件成为可选条件,因此可以根据给定的GET
参数以编程方式构建查询,即:
$query = "SELECT * from printed WHERE
printed_cat_id=".$cat2["printed_cat_id"]."
clientid=".$_SESSION["clientid"];
if(isset($_GET["pub"]))
{
$query .= " and publication_id=".$_GET["pub"];
}
if(isset($tag))
{
$query .= " and photo_tag=".$tag;
}
if(isset($_GET['date1']) && isset($_GET['date2']) )
{
$query .= " and date BETWEEN '".$_GET["date1"]."' AND '".$_GET["date2"]."'";
}
$DBObject->QueryText=$query;
这样,只有公布的参数才会被包括在mysql
query
中并进行检查
另一方面(在您的问题中不清楚),如果您只希望至少有一个条件为真,您可以在查询中使用OR
而不是AND
来查找