【问题标题】:Where should I add the where clause in a codeigniter model?我应该在 codeigniter 模型中的哪里添加 where 子句?
【发布时间】:2018-08-20 10:06:58
【问题描述】:

我只想创建一个排序查询。当我添加where 子句时,什么也没发生。

应该发生的是,当$search_param['type'] 具有值时,它应该只输出在 sp_archive.SP_Type 中具有$search_param['type'] 的那个

下面是查询:

function search_data($search_param){
    if(empty($search_param)){
        return array();
    }else{
    $this->db->select("sp_archive.SP_ID, SP_TITLE, SP_RATIONALE, SP_File, GROUP_CONCAT(Tag.Tag_Name) As Tag");
    $this->db->select("ad.Account_LastName AS ADLastName");
    $this->db->select("ad.Account_FirstName AS ADFirstName");
    $this->db->select("ad.Account_MiddleInitial AS ADMiddleInitial");

    $this->db->select("a.Account_FirstName AS AFirstName");
    $this->db->select("a.Account_MiddleInitial AS AMiddleInitial");
    $this->db->select("a.Account_LastName AS ALastName");

    $this->db->select("b.Account_FirstName AS BFirstName");
    $this->db->select("b.Account_MiddleInitial AS BMiddleInitial");
    $this->db->select("b.Account_LastName AS BLastName");

    $this->db->select("c.Account_FirstName AS CFirstName");
    $this->db->select("c.Account_MiddleInitial AS CMiddleInitial");
    $this->db->select("c.Account_LastName AS CLastName");

    $this->db->from("sp_archive");

    $this->db->join('account ad', 'sp_archive.Adviser = ad.Account_ID','left');
    $this->db->join('account a', 'sp_archive.Proponent_A = a.Account_ID','left');
    $this->db->join('account b', 'sp_archive.Proponent_B = b.Account_ID','left');
    $this->db->join('account c', 'sp_archive.Proponent_C = c.Account_ID','left');
    $this->db->join('tag', 'sp_archive.SP_ID = tag.SP_ID', 'inner');

    $this->db->where('sp_archive.SP_Type', array($search_param['type1'], $search_param['type2'],$search_param['type3'],$search_param['type4']));

    $this->db->like("SP_TITLE", $search_param['search']);   

    $this->db->or_like("ad.Account_LastName", $search_param['search']);
    $this->db->or_like("ad.Account_FirstName", $search_param['search']);
    $this->db->or_like("a.Account_LastName", $search_param['search']);
    $this->db->or_like("a.Account_FirstName", $search_param['search']);
    $this->db->or_like("c.Account_LastName", $search_param['search']);
    $this->db->or_like("c.Account_FirstName", $search_param['search']);
    $this->db->or_like("c.Account_LastName", $search_param['search']);
    $this->db->or_like("c.Account_FirstName", $search_param['search']);

    $this->db->group_by("sp_archive.SP_ID");
    $query = $this->db->get();
    return $query;
    }

【问题讨论】:

  • 您应该直接在问题中包含您的 PHP 代码,但我的第一个问题可能是您确定这个 WHERE 子句应该对询问?也许它只是没有影响任何记录,或者你没有正确编码。
  • 我认为在选择之后。因为 Where 子句将根据您的条件过滤您的数据,然后需要更少的行来过滤您的结果
  • like 查询覆盖你的 where 行为,在开始 like 查询之前添加 $this->db->group_start();,最后添加`$this->db->group_end();`
  • 我认为您正在寻找where_in 函数以允许多个查询?而不是where
  • 哦!,我只是在我的代码中发现了错误。我没有像 search_param['type1'] 这样传递查询所需的变量,我应该使用 where_in() 作为 where 子句

标签: mysql codeigniter codeigniter-3


【解决方案1】:

根据我的评论,您的代码应该是这样的

 $this->db->where('sp_archive.SP_Type', array($search_param['type1'], $search_param['type2'],$search_param['type3'],$search_param['type4']));

 $this->db->group_start();
 $this->db->like("SP_TITLE", $search_param['search']);   

 $this->db->or_like("ad.Account_LastName", $search_param['search']);
 $this->db->or_like("ad.Account_FirstName", $search_param['search']);
 $this->db->or_like("a.Account_LastName", $search_param['search']);
 $this->db->or_like("a.Account_FirstName", $search_param['search']);
 $this->db->or_like("c.Account_LastName", $search_param['search']);
 $this->db->or_like("c.Account_FirstName", $search_param['search']);
 $this->db->or_like("c.Account_LastName", $search_param['search']);
 $this->db->or_like("c.Account_FirstName", $search_param['search']);
 $this->db->group_end();

【讨论】:

    【解决方案2】:

    public function select_where($table,$where)
        {
              $r = $this->db->get_where($table,$where);
            // $sql  = $this->db->last_query();
            //echo $sql;
            $res = $r->result();
            //print_r($res);
            //die;
            return $res;
        }

    【讨论】:

    • 代码片段并不是用来格式化你的代码的!代码片段是可运行的 JavaScriptCSSHTML 代码块,可帮助创建最小、完整且可验证的示例! how to format my codeAbout Code Snippets
    猜你喜欢
    • 2023-01-24
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2020-03-12
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多