Это упрощенная версия имеющегося у меня кода:
$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);
}
ВЫБЕРИТЕ строки со статусом, найденным в условно построенном белом списке, с помощью построителя запросов CodeIgniter. ⇐ Php
Кемеровские программисты php общаются здесь
1777523043
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);
}
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия