codeigniter3 中使用 OR & AND 子句进行查询[重复]

问题描述 投票:0回答:2

我想通过 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;
    }

请帮我获取准确的代码。

php codeigniter-3
2个回答
2
投票

您必须使用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


1
投票

由于 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' )
© www.soinside.com 2019 - 2024. All rights reserved.