Как создать условие case в запросе codeigniter - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть такой запрос:

$this->db->query("SELECT `no_request`,`date_in`,`location`,`d_point`,`username`,SUM(request.`persen`) AS 'Persen',
        CASE 
            WHEN SUM(Persen) = 0 THEN 'Pending'
            WHEN SUM(persen) = 100 THEN 'Complete'
            WHEN SUM(persen) > 0 AND SUM(persen) < 100 THEN 'On Process'
        END AS 'states'
        FROM request WHERE `location` = '$lokasi' GROUP BY `no_request`
        HAVING 
        CASE 
            WHEN `Persen` = 0 THEN `states` = 'Pending'
        END", TRUE)->result_array();

Я хочу сделать запрос оригинальным из codeigniter, но у меня возникла проблема с моим запросом:

$this->db->select($this->fetching_column);
$this->db->select_sum($this->persen);
$this->db->select("
CASE
  WHEN SUM('persen') = 0 THEN 'Pending'
  WHEN SUM('persen') = 100 THEN 'Complete'
  WHEN SUM('persen') > 0 SUM('persen') < 100 THEN 'On Process'
END", FALSE);
$this->db->from($this->table);
$this->db->where($this->location . ' = ' . $location);
$this->db->group_by($this->group);

$result = $this->db->get();

Мой запрос неверный? или я не могу использовать case внутри $this->db->select()

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

$this->db->select() подтверждает дискреционный второй параметр. Если вы установите FALSE , CodeIgniter не будет пытаться обеспечить имена полей или таблиц. Это полезно, если вам нужно объяснение составного выбора, в котором запрограммированное удаление полей может нарушить их.

для справки: - https://codeigniter.com/userguide3/database/query_builder.html#selecting -данные

0 голосов
/ 25 февраля 2020

Я допустил ошибку в своем запросе, чтобы заставить мой запрос не работать, но теперь код в порядке, и я уже сделал свой код, я изменяю свой запрос следующим образом:

Из этого кода:

$this->db->select($this->fetching_column);
$this->db->select_sum($this->persen);
$this->db->select("
CASE
  WHEN SUM('persen') = 0 THEN 'Pending'
  WHEN SUM('persen') = 100 THEN 'Complete'
  WHEN SUM('persen') > 0 SUM('persen') < 100 THEN 'On Process'
END", FALSE);
$this->db->from($this->table);
$this->db->where($this->location . ' = ' . $location);
$this->db->group_by($this->group);
$result = $this->db->get();

Стало так:

$this->db->select($this->fetching_column);
$this->db->select_sum($this->persen, 'Persen');
$this->db->select("
  CASE 
    WHEN SUM(Persen) = 0 THEN 'Pending'
    WHEN SUM(Persen) = 100 THEN 'Complete'
    WHEN SUM(Persen) > 0 AND SUM(Persen) < 100 THEN 'On Process'
  END AS 'states'");
$this->db->from($this->table);
$this->db->where($this->location, $location);
$this->db->group_by($this->group);
$result = $this->db->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...