2011-08-21 122 views
0

有一个表包含像如何使用codeigniter执行此查询?

username,settings1,settings2,settings3 

用户名的列是一个独特的和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如果语句,任何其他方式来做到这一点?即时通讯使用笨2.0.2

问候

回答

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

如果你需要在这个循环正在检查这些价值观的事,你应该做一个选择让只有那些项目在$行,并避免“用户名”

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

否则,如果你想保留用户名,IF语句可能相当

if(in_array($key, array('setting1', 'setting2', 'setting3')) && $row->$key == "1") 
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 
+0

的事情是我要检查的设置值过其是否含有1或0 –

+0

好不是,我不认为有任何其他方式,而不是为每个设置调用“if”。您将需要根据每个设置的值来编写要执行的操作,并且只能通过if语句实现。如果你写了这些设置所做的事情,也许它们中的一些可以复合,如果它们是互斥的,但这是db table desing的问题:) –

1

您可以使用ActiveRecord outputing从表数组

$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]);