如何使用codeigniter执行此查询


how to do this query with codeigniter?

表中包含如下列:

username,settings1,settings2,settings3

username是唯一的,且setings1,2,3包含0或1的值。

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

我要选择与username匹配的行循环遍历列并检查哪些列包含0和1

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

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

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

// 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

可以使用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]);

可以迭代对象

// 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中有这些项,并避免出现"username"

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

否则,如果希望保留用户名,则if语句可以改为

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