我不精通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;