这是一个关于代码优化的问题,因为我的代码运行良好,但我认为有一种更简单的方法来做我做的事情,我解释说,我有一个管理界面,管理员可以搜索课程,但搜索可以是特定的,我的意思是你可以通过作者或/和按类别或/和学校搜索,如果你不选择任何这些选项,它将返回所有课程,所以这里是我的代码,它的工作我使用逻辑,因为我发送一个名为$param
的数组,包含3个值。查看$query
值,它只会更改Where
子句
Author School Category
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
我的代码以同样的方式工作
if(($param[0]==0)&&($param[1]==0)&&($param[2]==0))
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId ";
else if( ($param[0]==0) && ($param[1]==0) && (intval($param[2])>=1)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE categoriaId = ?;";
}
else if( ($param[0]==0) && ( intval($param[1])>=1) && ($param[2]==0)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE escuelasId = ?; ";
}
else if( ($param[0]==0) && ( intval($param[1])>=1) && (intval($param[2])>=1)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE escuelasId = ? AND categoriaId = ?; ";
}
else if( ( intval($param[0])>=1) && ($param[1]==0) && ($param[2]==0)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE autorId = ?; ";
}
else if( ( intval($param[0])>=1) && ($param[1]==0) && (intval($param[2])>=1)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE autorId = ? AND categoriaId = ?;";
}
else if( ( intval($param[0])>=1) && ( intval($param[1])>=1) && ($param[2]==0)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE autorId = ? AND escuelasId = ?; ";
}
else if( ( intval($param[0])>=1) && ( intval($param[1])>=1) && (intval($param[0])>=1)){
$query = "SELECT idCurso, tema, indice, descripcion, fecha, idioma, imagenes.ubicacion as imgLocation, enlaces, nivel, keywords, autorId, escuelasId, categoriaId, subcategoriaId FROM plataforma.cursos INNER JOIN imagenes ON imagenes.idImagen = cursos.imagenId WHERE autorId = ? escuelasId = ? AND categoriaId = ?;";
}
//"asi quedo ".$query;
if ($stmt = $mysqli->prepare($query)) {
/* bind result variables */
if(($param[0]==0)&&($param[1]==0)&&($param[2]==0)) {
}
if( ($param[0]==0) && ($param[1]==0) && (intval($param[2])>=1)){
$stmt->bind_param("s",$param[2]);
//echo $param[2];
}
if( ($param[0]==0) && ( intval($param[1])>=1) && ($param[2]==0)){
$stmt->bind_param("i",$param[1]);
}
if( ($param[0]==0) && ( intval($param[1])>=1) && (intval($param[2])>=1)){
$stmt->bind_param("ii",$param[1],$param[2]);
}
if( ( intval($param[0])>=1) && ($param[1]==0) && ($param[2]==0)){
$stmt->bind_param("i",$param[0]);
}
if( ( intval($param[0])>=1) && ($param[1]==0) && (intval($param[2])>=1)){
$stmt->bind_param("ii",$param[0],$param[2]);
}
if( ( intval($param[0])>=1) && ( intval($param[1])>=1) && ($param[2]==0)){
$stmt->bind_param("ii",$param[0],$param[1]);
}
if( ( intval($param[0])>=1) && ( intval($param[1])>=1) && (intval($param[0])>=1)){
$stmt->bind_param("iii",$param[0],$param[1],$param[2]);
}
/* execute statement */
$stmt->execute();
我设置$param[x]>=1
因为如果值为0表示该字段未被选中但如果选中该字段则必须具有大于或等于1的值
就像我之前说过的,这段代码有效,但我知道它可以少一些,但我不知道方式