ВЫБЕРИТЕ строки со статусом, найденным в условно построенном белом списке, с помощью построителя запросов CodeIgniter.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 ВЫБЕРИТЕ строки со статусом, найденным в условно построенном белом списке, с помощью построителя запросов CodeIgniter.

Сообщение Anonymous »

Это упрощенная версия имеющегося у меня кода:
$this->db->select('column1, column2, status, etc');

if ($search['option_1']){
$this->db->or_where('status', 15);
$this->db->or_where('status', 20);
}

if ($search['option_2']){
$this->db->or_where('status', 30);
$this->db->or_where('status', 40);
$this->db->or_where('status', 50);
}

if ($search['option_3']){
$this->db->or_where('status', 99);
}

$this->db->where('column', $search['value']);
etc..

На веб-странице (форме поиска) у меня, помимо других полей и полей выбора, есть три флажка: от option_1 до option_3. Все флажки являются необязательными. Каждый флажок соответствует статусу.
Все флажки могут быть отмечены, некоторые отмечены или флажок не установлен.
Я думаю, проблема с этим кодом заключается в том, что скобки отсутствуют вокруг операторов OR и, следовательно, «ломают» запрос. Должен ли я сделать:
if ($search['option_1']) {
$this->db->where('(status = 15 OR status = 20)');
}
if ($search['option_1'] && $search['option_2']) {
$this->db->where('(status = 15 OR status = 20 OR status = 30 OR status = 40 OR status = 50)');
}
etc...

или есть более разумный способ?
[ОБНОВЛЕНИЕ]

Я использую это, пока кто-нибудь не придумает лучший способ:
if ($search['option_1'] || $search['option_2'] || $search['option_3']) {
if ($search['option_1']){
$status = '(status = 15 OR status = 20)';
}
else if ($search['option_2']){
$status = '(status = 30 OR status = 40 OR status = 50)';
}
else if($search['option_3']) {
$status = 'status = 99';
}
else if($search['option_1'] && $search['option_2']) {
$status = '(status = 15 OR status = 20 OR status = 30 OR status = 40 OR status = 50)';
}
else if($search['option_1'] && $search['option_3']) {
$status = '(status = 15 OR status = 20 OR status = 99)';
}
else if($search['option_2'] && $search['option_3']) {
$status = '(status = 30 OR status = 40 OR status = 50 OR status = 99)';
}
else if($search['option_1'] && $search['option_2'] && $search['option_3']) {
$status = '(status = 15 OR status = 20 OR status = 30 OR status = 40 OR status = 50 OR status = 99)';
}

$this->db->where($status);
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»