Как избежать дублирования строк из моего массива результатов при использовании предложения where - PullRequest
1 голос
/ 23 апреля 2020

Мне нужны имена пользователей, которые применили время, которое я отправил с моего контроллера, и time = double, поэтому мне нужно отобразить результаты этой функции, но она дублирует результаты, есть ли способ решить эту проблему?

Имена пользователей, выбравших time = double в указанный c день, отображаются каждый день.

public function get_Shifts($day,$time){

    $this->db->select('user.fullname');
    $this->db->from('shifts');
    $this->db->join('user', 'shifts.user_id = user.id', 'left');
    $this->db->where('day=', $day);
    $this->db->where('time=',$time);
    $this->db->or_where('time=', $double);
    $query = $this->db->get();

    return $query->result_array();
}

Я попытался добавить эту строку, но это не помогло: $this->db->distinct();

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Начиная с Codeigniter 3, вы можете использовать его Группировка запросов Функции:

Группировка запросов позволяет создавать группы предложений WHERE, заключая их в скобки. Это позволит вам создавать запросы со сложными предложениями WHERE

. В вашем случае вы можете использовать:

$this->db->group_start()
  $this->db->where('day', $day);
  $this->db->where('time', $time);
$this->db->group_end()
$this->db->or_where('time', $double);

, это сгенерирует что-то вроде:

WHERE ( (`day` = '2020-04-23' AND `time` = '16:00'  ) OR `time` = true )

отредактируйте, чтобы ответить на комментарий: , чтобы создать вывод, подобный: WHERE ( (day = '2020-04-23' AND (time = '16:00' OR time = true ) )

, вы используете этот подход:

$this->db->where('day', $day);
$this->db->group_start()
  $this->db->where('time', $time);
  $this->db->or_where('time', $double);
$this->db->group_end()

примечание: правильный способ использования CI где ():

$this->db->where('day', $day);, а не $this->db->where('day=', $day);

0 голосов
/ 23 апреля 2020

При использовании

$ this-> db-> where ('day =', $ day) должна быть ошибка;

$ this-> db-> where (' time = ', $ time);

$ this-> db-> or_where (' time = ', $ double);

Правильный способ использования выражения where

$ this-> db-> where ('day', $ day);

$ this-> db-> where ('time', $ time);

$ this- > db-> or_where ('time', $ double);

И если вы получаете повторяющиеся данные для вышеуказанного запроса, передайте имя столбца в различный тип: -

$ this- > db-> различны ( 'user.fullname');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...