我正在尝试使用多个“LIKE”条件来查找多个列中的匹配项。
我的PHP:
$area = $this->session->userdata('area');
if ($area == 'inbox') {
$this->db->where('receiver', $user);
$this->db->where('receiver_deleted !=', 'yes');
} elseif ($area == 'sent') {
$this->db->where('sender', $user);
$this->db->where('sender_deleted !=', 'yes');
}
$this->db->like('sender',$k);
$this->db->or_like('msg',$k);
$this->db->from('messages');
$this->db->join('users', 'users.username = messages.sender', 'inner');
$this->db->order_by('read', 'no');
$sql = $this->db->get();
if ($sql->num_rows > 0) {
return $sql->result();
} else {
echo "failed!";
}
我也尝试过:
$this->db->like('sender', $k);
$this->db->like('msg', $k);
在第一个中,什么也没有发生。在第二个中,仅执行一个,在本例中是第一个 LIKE。我无法让两者同时工作。
为此,您应该使用带有 where 子句的分组。
$area = $this->session->userdata('area');
if($area == 'inbox'){
$this->db->where('receiver',$user);
$this->db->where('receiver_deleted !=','yes');
}elseif($area == 'sent'){
$this->db->where('sender',$user);
$this->db->where('sender_deleted !=','yes');
}
$this->db->group_start(); //group start
$this->db->like('sender',$k);
$this->db->or_like('msg',$k);
$this->db->group_end(); //group ed
or_like
将在两个点之间产生一个 OR。您可以将一个数组传递给 like
以放置多个数组,并在它们之间使用 AND。
你尝试过这样做吗:
$this->db->like(array('sender' => $k, 'msg' => $k));
这将搜索多列,中间有
OR
$this->db->or_like(array('sender' => $k, 'msg' => $k));/* LIKE OR LIKE */
使用这个:
$this->db->or_like('location',$this->input->post('searchtext'));
$this->db->or_like('title',$this->input->post('searchtext'));
你会得到你想要的。
group_start()
和 group_end()
来封装您的条件逻辑。where()
和 like()
方法可以接收关联数组以减少方法调用。控制器:
$result['messages'] = $this->YourModel->getMessages(
$this->currentUserId,
$this->input->get('keyword'),
$this->session->userdata('area')
);
型号:
public function getMessages(
int $user,
string $search,
?string $area = null
): array {
switch ($area) {
case 'inbox':
$this->db->where([
'receiver' => $user,
'receiver_deleted !=' => 'yes',
]);
break;
case 'sent':
$this->db->where([
'sender' => $user,
'sender_deleted !=' => 'yes',
]);
break;
}
return $this->db
->group_start()
->or_like([
'sender' => $search,
'msg' => $search,
])
->group_end()
->join('users', 'users.username = messages.sender')
->order_by('read', 'no')
->get('messages')
->result();
}
你可以这样做:
$this->db->get_where('tablename',$whereclause);
我也遇到同样的问题,成功了。