PHP-Mysql WHERE为空并返回结果

时间:2013-11-06 14:41:08

标签: php mysql sql where

我不熟悉MYSQL,我需要一些指导。我已阅读多个MYSQL WHERE语句解释,但未发现此确切问题。我有一个名为研究的表,其中包含id,名称,作者,类别,格式和其他一些字段。

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

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

7 个答案:

答案 0 :(得分:1)

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

SELECT * FROM estudos WHERE format='$format'

或者,使用OR而不是AND:

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

答案 1 :(得分:1)

您需要根据项目是否被选中有条件地附加条件。我建议像:

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

请注意,$params部分仅在您使用参数化查询时才需要,例如PDO(您应该这样做)。

答案 2 :(得分:0)

将条件分配给变量

例如

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

并将其附加到您的查询

答案 3 :(得分:0)

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

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

答案 4 :(得分: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'

您应该根据选择

运行查询

答案 5 :(得分: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 . "'";
    }
}

我希望有效。

答案 6 :(得分: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;