@Us59

Как создать ф-цию запроса в БД?

public function GetData_v2 ($country, $idSite, $limit) {
$sql = "SELECT B.Id AS IdProxy, B.Ip FROM sc_proxy_v2 B WHERE B.Country =:country AND (SELECT COUNT(*) FROM sc_proxy_request_log C WHERE C.IdSite =:idSite) <= " . $limit. " ORDER BY B.Id DESC LIMIT 1";

$params = ['country' => $country, 'idSite' => $idSite];
$query = $this->DB->prepare($sql);
$query->execute($params);
}


Вопрос 1: Допустим мне нужно выбрать из БД только USA адреса, я указываю в параметрах ф-ции 'US' и задаю другие нужные параметры. Но бывает случай, что мне например не нужно делать сотрировку по странам (чтобы брал все записи, любые) как предусмотреть это в ф-ции?

Вопрос 2: Как $limit передавать через params? :limit не сработает в данном случае.
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 2
ematveev
@ematveev
PHP разработчик / руководитель / писатель
так предусмотри не один запрос, и выбирай более подходящий
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Возможно несколько вариантов. Можно сделать несколько запросов, и в зависимости от входных аргументов выбирать один из них. Это наиболее правильный вариант.

Можно, но способ плох, модифицировать запрос в сторону универсальности. Например:
... WHERE (B.Country=:country OR :country='') AND ...
.

Или совсем "грязный" вариант, менять операцию в зависимости от аргумента:
... WHERE B.Country ".(!empty($country) ? "=" : "<>").":country AND ...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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