Необязательный пункт where в подготовленном запросе

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]