我想通过 user_id 以及 linked_by=user & self 获取患者数据 但它显示的是其他 user_id 的数据
"added_by"=>"self"
我知道 SQL 查询是:
SELECT * FROM `patients` WHERE ( `added_by` = 'user' OR `added_by` = 'self' ) AND `user_id` = '1'
但我需要知道如何在 codeigniter3 中进行查询 这是我的代码:
public function get_all_patients_by_user($user_id)
{
$this->db->where(["added_by"=>"user","user_id"=>$user_id]);
$this->db->or_where(["added_by"=>"self","user_id"=>$user_id]);
$data = $this->db->get("patients")->result_array();
return $data;
}
请帮我获取准确的代码。
您必须使用group_start和group_end。 所以,你的方法应该是:
public function get_all_patients_by_user($user_id)
{
return $this->db
->from('patients')
->group_start() // Here
->where('added_by', 'user')
->or_where('added_by', 'self')
->group_end() // and Here
->where('user_id', $user_id)
->get()
->result_array();
}
您可以在这里了解更多信息: https://codeigniter.com/userguide3/database/query_builder.html?highlight=group_start#query-grouping
由于 CodeIgniter 默认处理
or_where
和 and_where
条件的方式,您的原始查询生成了错误的 SQL 结构。
要实现所需的查询结构,其中“added_by”是“user”或“self”并且“user_id”是“1”,您应该使用CodeIgniter的group_start和group_end方法显式对“added_by”条件进行分组,然后将它们与“user_id”。
public function get_all_patients_by_user($user_id)
{
$this->db->group_start();
$this->db->where("added_by", "user");
$this->db->or_where("added_by", "self");
$this->db->group_end();
$this->db->where("user_id", $user_id);
$data = $this->db->get("patients")->result_array();
return $data;
}
此代码生成您想要的 SQL 查询。
SELECT * FROM `patients` WHERE ( (`added_by` = 'user' OR `added_by` = 'self') AND `user_id` = '1' )