Задать условие вывода оператора AND

404
30 декабря 2016, 13:44

Как в такой ситуации правильно сформировать условия, чтобы AND выводился тогда, когда ему положено? Отправляется форма из нескольких полей, причем количество полей может быть заполнено любое. В данном примере если значение не пустое, оно сразу подставляется с AND после WHERE, что вызывает ошибку:

$q = "SELECT * FROM (  
  SELECT *, ROW_NUMBER() OVER (ORDER BY ID) as row FROM dbo.KUR_Person WHERE ";
if (!empty($raion)) {
  $q. = " CONTAINS (ADR_RAION,'\"$raion*\"')";
}
if (!empty($gorod)) {
  $q. = " AND CONTAINS (ADR_GOROD,'\"$gorod*\"')";
}
if (!empty($gorod)) {
  $q. = " AND CONTAINS (ADR_GOROD,'\"$gorod*\"')";
}
if (!empty($naspunkt)) {
  $q. = " AND CONTAINS (ADR_NASPUNKT,'\"$naspunkt*\"')";
}
if (!empty($ulica)) {
  $q. = " AND CONTAINS (ADR_ULICA,'\"$ulica*\"')";
}
if (!empty($dom)) {
  $q. = " AND ADR_DOM = '$dom'";
}
if (!empty($korpus)) {
  $q. = " AND ADR_KORPUS = '$korpus')";
}
if (!empty($kvartira)) {
  $q. = " AND ADR_KVARTIRA = '$kvartira'";
}
$q. = ") a WHERE row >= $start and row <= $end ";

Как заставить вставать AND там, где ему положено, чтобы он шел только в тому случае, если есть предыдущая переменная?

Answer 1

Про 1 = 1 уже сказали. Еще вариант - сформировать массив условий, а потом склеить его при помощи implode(' AND ', ...)

$q = "SELECT * FROM (  
  SELECT *, ROW_NUMBER() OVER (ORDER BY ID) as row FROM dbo.KUR_Person";
$params = array();
if (!empty($raion)) {
  $params[] = "CONTAINS (ADR_RAION,'\"$raion*\"')";
}
if (!empty($gorod)) {
  $params[] = " CONTAINS (ADR_GOROD,'\"$gorod*\"')";
}
.......
if (count($params) > 0)
  $q .= ' WHERE ' . implode(' AND ', $params)

А если вместо and несколько or

Либо так же, через промежуточный массив, либо добавив условие

WHERE 1 = 0
READ ALSO
PHP массив с русскими ключами

PHP массив с русскими ключами

Некий метод в системе возвращает массив с русскими ключами и строками в значения

380
Куки на машине пользователя

Куки на машине пользователя

Вопрос в следующем, допустим я делаю авторизацию пользователя на сайте и в случае успешной авторизации устанавливаю куки (setcookie('auth','yes',time()+3600);)данная...

371
Странная ошибка в коде [требует правки]

Странная ошибка в коде [требует правки]

Подскажите пожалуйста, выдает ошибку в строке 3

394