@arseniy88

Как делать фильтрацию PHP / RestAPI / RedBeanPHP?

Всем привет !

Делаю фильтрацию через get параметры (использую RedBeanPHP) :

//sort
$sort = $_GET["_sort"];
//order
$order = $_GET["_order"];
//limit
$limit = $_GET["_limit"];
//search
$search = $_GET["q"];
//category
$category = explode(",", $_GET["category"]);
//min - max
$min = $_GET["min"];
$max = $_GET["max"];
//auth
$auth = explode(",", $_GET["auth"]);

$query = "";
$query .= isset($sort) && isset($order) ? "ORDER BY $sort $order " : "";
$query .= $limit !== 0 ? "LIMIT $limit " : "";
$query .= isset($search) ? "search_tags LIKE '%$search%'" : "";

if ($category[0] !== "") {
	foreach ($category as $categoryKey => $value) {
		if ($categoryKey === 0) {
			$query .= "category LIKE '%$value%' ";
		} else {
			$query .= "OR category LIKE '%$value%' ";
		}
	}
}

$query .= $min !== 0 && $max !== 0 ? "price >= $min AND price <= $max " : "";

if ($auth[0] !== "") {
	foreach ($auth as $authKey => $value) {
		if ($authKey === 0) {
			$query .= "auth LIKE '%$value%' ";
		} else {
			$query .= "OR auth LIKE '%$value%' ";
		}
	}
}

$goodsMV = R::findAll("goods", $query);


Как не городить большое количество if и правильно указывать SQL, то есть OR, AND?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Извиниться перед заказчиком, вернуть аванс, купить учебник или оплатить достойные курсы, освоить основы программирования, основы веб-программирования, основы SQL, основый безопасности веб-приложений, основы алгоритмов, основый работы с БД из РНР, и только после этого постепенно приступать к данной задаче.

Сейчас этот треш нельзя выкладывать в продакшен ни под каким видом.
Ответ написан
Комментировать
Makro_Slavik
@Makro_Slavik
Через $_GET["category"] передать id категории собрать в массив и вместо foreach ($category as $categoryKey => $value)
и category LIKE '%$value%' использовать оператор "in" есть такой в sql - 2sql.ru/novosti/sql-in

получиться что то типа такого
$query .= "WHERE category IN ($categories)";
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы