PHP-Mysql WHERE 为空并返回结果


PHP-Mysql WHERE is empty AND returns results

我不精通MYSQL,我需要一些指导。我已经阅读了多个 MYSQL WHERE 语句解释,但没有找到这个确切的问题。我有一个名为 studies 的表格,其中包含 id、姓名、作者、类别、格式等字段。

我正在构建一个带有复选框的过滤器来缩小查询范围。我想获得具有特定作者和类别和格式的所有研究。当我构建查询时,我的问题就来了。如果仅选择格式,则查询返回空,因为未选择作者。如何在没有 WHERE 语句的情况下从 AND 语句中获取结果?这是我到目前为止所拥有的...

"SELECT * FROM estudos WHERE subcategory='$subcategory' AND author='$author' AND format='$format'"

如果 author 为空,请不要将其包含在查询中:

SELECT * FROM estudos WHERE format='$format'

或者,使用 OR 代替 AND:

SELECT * FROM estudos WHERE subcategory='$subcategory' OR author='$author' OR format='$format'
您需要根据是否

选择了项目有条件地附加条件。 我建议像这样:

$where = array();
$params = array();
if (isset($format)) {
    $where[] = "format = ?";
    $params[] = $format;
}
/* other parameters */
$query = "SELECT * FROM estudos WHERE "
    . implode(' AND ', $where);

请注意,仅当您使用参数化查询(如 PDO)时才需要$params部分。

如果只选择了格式,则应仅根据格式进行查询,例如

SELECT * FROM estudos WHERE format='$format'

如果选择了格式和作者,则

SELECT * FROM estudos WHERE author='$author' AND format='$format'

如果全部被选中,则

SELECT * FROM estudos WHERE subcategory='$subcategory' AND author='$author' AND format='$format'

您应该根据选择运行查询

将 where 条件分配给变量

例如

if($categoryCheckbox){
 $whare.="AND category='$category'";
}

并将其附加到查询中

您可以使用以下代码生成查询

$q = "SELECT * FROM estudos WHERE format='$format'";
if ($author != '') { $q.= "AND author='$author'"; }
if ($subcategory != '') { $q.= "AND subcategory='$subcategory'"; }

好吧,我要做的是:

$query = sprintf("SELECT * FROM estudos");
if ($subcategory != "" || $author != "" || $format != "") {
    $query .= " WHERE ";
    $i = 0;
    if ($subcategory != "") {
        if ($i > 0) $query .= " AND ";
        $query .= "subcategory='" . $subcategory . "'";
    }
    if ($author != "") {
        if ($i > 0) $query .= " AND ";
        $query .= "author='" . $author . "'";
    }
    if ($format != "") {
        if ($i > 0) $query .= " AND ";
        $query .= "format='" . $format . "'";
    }
}

我希望这能奏效。

我建议您使用串联重写查询。喜欢:

$query= 'SELECT * FROM estudos WHERE 1';

if(isset($subcategory)) $query .= ' AND subcategory='.$subcategory;

if(isset($author)) $query .= ' AND author='.$author;

if(isset($format)) $query .= ' AND format='.$format;