【问题标题】:CodeIgniter: How to use WHERE clause and OR clauseCodeIgniter:如何使用 WHERE 子句和 OR 子句
【发布时间】:2011-02-27 21:25:42
【问题描述】:

我正在使用以下代码从带有 Code Igniter webapp 的 MySQL 数据库中进行选择:

$query = $this->db->get_where('mytable',array('id'=>10));

这很好用!但是我想用 CI 库写下面的 MySQL 语句?

SELECT * FROM `mytable` WHERE `id`='10' OR `field`='value'

有什么想法吗? 谢谢!

【问题讨论】:

    标签: mysql select codeigniter where-clause


    【解决方案1】:

    什么对我有用:

      $where = '';
       /* $this->db->like('ust.title',$query_data['search'])
            ->or_like('usr.f_name',$query_data['search'])
            ->or_like('usr.l_name',$query_data['search']);*/
            $where .= "(ust.title like '%".$query_data['search']."%'";
            $where .= " or usr.f_name like '%".$query_data['search']."%'";
            $where .= "or usr.l_name like '%".$query_data['search']."%')";
            $this->db->where($where);
    
    
    
    $datas = $this->db->join(TBL_USERS.' AS usr','ust.user_id=usr.id')
                ->where_in('ust.id', $blog_list) 
                ->select('ust.*,usr.f_name as f_name,usr.email as email,usr.avatar as avatar, usr.sex as sex')
                ->get_where(TBL_GURU_BLOG.' AS ust',[
                    'ust.deleted_at'     =>  NULL,
                    'ust.status'     =>  1,
                ]); 
    

    我必须这样做才能创建这样的查询:

    SELECT `ust`.*, `usr`.`f_name` as `f_name`, `usr`.`email` as `email`, `usr`.`avatar` as `avatar`, `usr`.`sex` as `sex` FROM `blog` AS `ust` JOIN `users` AS `usr` ON `ust`.`user_id`=`usr`.`id` WHERE (`ust`.`title` LIKE '%mer%' ESCAPE '!' OR  `usr`.`f_name` LIKE '%lok%' ESCAPE '!' OR  `usr`.`l_name` LIKE '%mer%' ESCAPE '!') AND `ust`.`id` IN('36', '37', '38') AND `ust`.`deleted_at` IS NULL AND `ust`.`status` = 1 ;
    

    【讨论】:

      【解决方案2】:

      要使用主动记录方法or_where

      $this->db->select("*")
      ->from("table_name")
      ->where("first", $first)
      ->or_where("second", $second);
      

      【讨论】:

        【解决方案3】:
        $where = "name='Joe' AND status='boss' OR status='active'";
        
        $this->db->where($where);
        

        虽然我晚了 3/4 个月,但在定义 where 子句后,您仍然执行以下操作...$this->db->get("tbl_name");

        【讨论】:

        • 感谢您的贡献。
        【解决方案4】:

        你可以用这个:

        $this->db->select('*');
        $this->db->from('mytable');
        $this->db->where(name,'Joe');
        $bind = array('boss', 'active');
        $this->db->where_in('status', $bind);
        

        【讨论】:

        • 我如何得到结果?
        • 结果存储在哪里?
        【解决方案5】:

        您可以为此使用 or_where() - CI 文档中的示例:

        $this->db->where('name !=', $name);
        
        $this->db->or_where('id >', $id); 
        
        // Produces: WHERE name != 'Joe' OR id > 50
        

        【讨论】:

        • 根据文档 or_where 已弃用。 codeigniter.com/user_guide/database/active_record.html
        • 我相信你可能读错了。在我看来,旧方法 orwhere() 已被弃用,取而代之的是新方法 or_where()。
        • 感谢您澄清这一点!即使在 4 年后也有很大帮助!
        【解决方案6】:
        $where = "name='Joe' AND status='boss' OR status='active'";
        
        $this->db->where($where);
        

        【讨论】:

        • 虽然我只迟到了 3 年,但它会从哪张桌子上得到呢?如何指定表
        • 虽然我晚了 3/4 个月,但在定义 where 子句后,您仍然执行以下操作... $this->db->get("tbl_name");
        • $where = '(name="Joe" AND status="boss" OR status="active")'; 见:stackoverflow.com/a/9941814/594235
        猜你喜欢
        • 2018-01-08
        • 1970-01-01
        • 2020-11-28
        • 2012-04-23
        • 1970-01-01
        • 2018-06-15
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多