0

我对MYSQL不太熟悉,这里需要一些指导。我已经阅读了多个 MYSQL WHERE 语句解释,但没有找到这个确切的问题。我有一个名为 studies 的表,其中包含 id、name、author、category、format 和其他一些字段。

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

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

7 回答 7

1

您需要根据是否选择项目有条件地附加条件。我建议类似:

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

请注意,$params仅当您使用 with 之类的参数化查询时才需要该部分PDO(您应该这样做)。

于 2013-11-06T14:45:20.463 回答
1

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

SELECT * FROM estudos WHERE format='$format'

或者,使用 OR 代替 AND:

SELECT * FROM estudos WHERE subcategory='$subcategory' OR author='$author' OR format='$format'
于 2013-11-06T14:42:43.567 回答
0

将 where 条件分配给变量

例如

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

并将其附加到您的查询中

于 2013-11-06T14:46:48.173 回答
0

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

$q = "SELECT * FROM estudos WHERE format='$format'";
if ($author != '') { $q.= "AND author='$author'"; }
if ($subcategory != '') { $q.= "AND subcategory='$subcategory'"; }
于 2013-11-06T14:46:58.207 回答
0

那么我会做的是:

$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 . "'";
    }
}

我希望这行得通。

于 2013-11-06T14:50:28.110 回答
0

如果只选择格式,您应该只根据格式进行查询,例如

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'

您应该根据选择运行查询

于 2013-11-06T14:48:16.290 回答
0

我会建议你使用连接重写查询。喜欢:

$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;

于 2013-11-06T15:36:51.893 回答