это вопрос об оптимизации кода, потому что мой код работает хорошо, но я думаю, что есть более простой способ сделать то, что я сделал, я объясняю, у меня есть интерфейс администратора, где администратор может искать курсы, но поиск может быть конкретным, я имею в виду Вы можете искать по автору или / и по категории или / и по школе, и если вы НЕ выберете ни один из этих вариантов, он возвращает все курсы, так что вот мой код, и он работает, я использовал логику, потому что я отправляю массив с именем $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
И, как я уже говорил, этот код работает, но я знаю, что он может быть меньше, но я не знаю, как
Задача ещё не решена.
Других решений пока нет …