объединение MySQL запросов И ИЛИ в Codeigniter

Похоже, вы пытаетесь создать / получить json-выход. Я вижу две проблемы с вашим подходом. 1) Вы не указали приложение / json в своем заголовке Accept 2) Вам нужно указать output = "application / json" в вашем @RequestMapping

29
задан gopi1410 15 June 2012 в 19:24
поделиться

8 ответов

и это будет работать?

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->where("(FirstName='Tove' OR FirstName='Ola' OR Gender='M' OR Country='India')", NULL, FALSE);
$query = $this->db->get('Persons');
return $query->result();
41
ответ дан csotelo 15 June 2012 в 19:24
поделиться

В CodeIgniter 3 появились новые методы group_start () и group_end () , которые служат именно для этой цели.

return $this->db
     ->where('LastName', 'Svendson');
     ->where('Age', 12);
     ->group_start()
         ->where('FirstName','Tove')
         ->or_where('FirstName','Ola')
         ->or_where('Gender','M')
         ->or_where('Country','India')
     ->group_end()
     ->get('Persons')
     ->result();
40
ответ дан gadelat 15 June 2012 в 19:24
поделиться

Вы можете использовать это просто

$this->db->where("status","live")->or_where("status","dead");

вы также можете использовать

$this->db->where("(status='live' OR status='dead')");
4
ответ дан Waseem shah 15 June 2012 в 19:24
поделиться

Сам запрос не имеет смысла, вы выбираете:

  • Туве Свендсон, 12 лет
  • Ола Свендсен, 12 лет
  • любой мужчина по имени Свендсон, 12 лет
  • любой человек из Индии по имени Свендсон, 12 лет

Туве кажется именем мужчины, поэтому выбор пола не требуется. Ола похожа на девичью фамилию, поэтому выбор пола не только не нужен, но и не имеет смысла. Ваш запрос вернет любого 12-летнего мужчину по имени Свендсон, любого 12-летнего из Индии по имени Свенсон, а также Туве и Олу Свендсона, ЕСЛИ им 12 лет.

Почему вы не хотите поместить его в () скобки? Вы хотите сделать это с помощью активной записи по какой-то причине?

-3
ответ дан Dirk de Man 15 June 2012 в 19:24
поделиться

с использованием работы с кодовым блоком 3.0, есть новая функция, доступная для отдельной или где и где операции. То есть группировка и конец группы

код, как,

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->group_start();
$this->db->or_where('FirstName','Tove');
$this->db->or_where('FirstName','Ola');
$this->db->or_where('Gender','M');
$this->db->or_where('Country','India');
$this->db->group_end();
$query = $this->db->get('Persons');
return $query->result();
3
ответ дан Sherin Green 15 June 2012 в 19:24
поделиться

Попробуйте использовать Query grouping

Ссылку для него

http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping

2
ответ дан Jatin Raikwar 15 June 2012 в 19:24
поделиться

В Codeigniter мы можем использовать как это легко понять.

$sql = "SELECT
            *
        FROM
            `Persons`
        WHERE
            LastName = 'Svendson'
        AND Age = '12'
        AND (
            FirstName = 'Tove'
            OR FirstName = 'Ola'
            OR Gender = 'M'
            OR Country = 'India'
        )";

$query = $this->db->query($sql);

return $query->result();
2
ответ дан Andy 15 June 2012 в 19:24
поделиться

В настоящее время в CI2 вы не можете получить доступ к методу Query Builder ($ this-> db -> _ compile_select ()) класса Database, не расширяя класс Database и не изменяя тип доступа метода с private на public / protected, что убивает способность создавать подзапросы так же, как вы пытаетесь построить с помощью класса ActiveRecord. Единственный способ создать подзапрос, подобный тому, который вы пытаетесь построить, - это просто использовать метод запроса db

$table = $this->db->dbprefix('tablename');

$sql = "SELECT * FROM `{$table}` WHERE field1='?' AND (field2='?' OR field3='?') ";
$this->db->query($sql,array($field1,$field2,$field3));  

. В блоге CI Subquerys было сообщение об этом, но он устарел и работает только на CI 1.7 Надеюсь, это немного поможет.

1
ответ дан Shawn C 15 June 2012 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: