【问题标题】:how to do this query with codeigniter?如何使用 codeigniter 进行此查询?
【发布时间】:2011-08-21 10:50:58
【问题描述】:

有一个表包含像这样的列

username,settings1,settings2,settings3

username 是唯一的,settings1,2,3 包含 0 或 1 个值。

$query = $this->db->query("SELECT * FROM tbl_users WHERE username = 'test'");
$queryrow = $query->row();

所以我想选择与用户名匹配的行并遍历列并检查哪一列包含 0 和 1

我可以通过为每一列写一个 if 语句来做到这一点,比如

if($queryrow->settings1=="1"){
..
}

表中有 7 列,所以不是写 7 个 if 语句,还有其他方法吗?我正在使用 codeigniter 2.0.2

问候

【问题讨论】:

    标签: php codeigniter codeigniter-2


    【解决方案1】:
    // use active record to work even less and be safer 
    $query = $this->db->get_where('tbl_users', array('username' => 'test'));
    if($query->num_rows() < 1){
        //prevent errors
        return false; // or do something more apropriate
    }
    
    $data = $query->row();
    $data->setting1; // contains setting1 value
    $data->setting2; // contains setting2 value
    $data->setting3; // contains setting3 value
    

    【讨论】:

    • 问题是我也想检查设置值是否包含 1 或 0
    • 嗯,我认为除了为每个设置调用if 之外,没有其他方法可以做到这一点。您将不得不根据每个设置的值在某个地方编写要做什么,并且您只能使用if 语句来实现它。如果您编写了这些设置的作用,那么它们中的一些可能会被复合,如果它们是相互排斥的,但那是数据库表设计问题:)
    【解决方案2】:

    您可以使用 activerecord 从表中输出一个数组

    $qry = $this->db->get_where('tbl_users',array('username' => 'test'));
    $res = $qry->result_array();
    
    // Since you mention each username is a unique, then this should outputing the array of settings
    var_dump($res[0]);
    

    【讨论】:

      【解决方案3】:

      你可以迭代对象

      // use active record to work less and be safer
      $this->db->where('username', 'test');
      $query = $this->db->get('tbl_users');
      
      foreach ($query->result() as $row)
      {
          // iterate the row object
          foreach($row as $key => $item)
          {
              if($row->$key == "1")
              {
                  // your code
              }
          }
      }
      

      如果您在此循环中需要做的只是检查这些值,则应该执行 SELECT 以仅在 $row 中包含这些项目,并避免使用“用户名”

      $this->db->select('setting1, setting2, setting3');
      

      否则,如果你想保留用户名,IF语句可能会比较

      if(in_array($key, array('setting1', 'setting2', 'setting3')) && $row->$key == "1")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 2013-02-20
        • 1970-01-01
        相关资源
        最近更新 更多