我不熟悉MYSQL,我需要一些指导。我已阅读多个MYSQL WHERE语句解释,但未发现此确切问题。我有一个名为研究的表,其中包含id,名称,作者,类别,格式和其他一些字段。
我正在构建一个带有复选框的过滤器来缩小查询范围。我想用特定的作者和类别和格式进行所有研究。我的问题出现在我构建查询时。如果仅选择格式,则查询将返回空,因为未选择任何作者。如何在没有WHERE语句的情况下从AND语句中获取结果?这是我到目前为止所拥有的......
"SELECT * FROM estudos WHERE subcategory='$subcategory' AND author='$author' AND format='$format'"
答案 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;