搜索一个表时存在多个条件


Multiple conditions when searching one table

我想在一个表中搜索适用于条件的行(在日期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来查找