2011-09-18 182 views
1

我有两个表格书籍和作者。使用CodeIgniter我希望用户能够过滤结果 - 例如,显示author_id ='x'和book_lang ='y'和publication_year ='2000'的结果。过滤条件值来自用户通过下拉菜单。使用CodeIgniter过滤结果

什么是使用codeigniter助手和绑定等生成查询的最佳方式?例如,下面的查询将给我author_id = 1的所有内容。例如,如果过滤器是混合的,那么该怎么办? author_id = 1; language ='all'(不要把where子句放在语言上)和publication year ='all'也不要放在where子句中。我是否需要手动检查值和代码或者是否有一个codigniter帮助器方法,允许如果下拉值为'全部显示',则将从where子句中删除过滤器?

$sql = "select * from AUTHORs a , BOOKS b where 
     a.AUTH_ID = b.BOOK_AUTH_ID 
     and b.BOOK_AUTH_ID = ? 
     and b.BOOK_LANGUAGE = ? 
     and b.PUB_YEAR = ? "; 

$query = $this->db->query($sql, array ($author_id, $book_lang, $pub_year)); 

回答

3

您应该使用笨的Active Record类来构建你的查询:

$this->db->select('*'); 
$this->db->from('AUTHORs a , BOOKS b'); 
$this->db->where('a.AUTH_ID', 'b.BOOK_AUTH_ID'); 

if ($author_id != 'all') $this->db->where('b.BOOK_AUTH_ID', $author_id); 
if ($book_lang != 'all') $this->db->where('b.BOOK_LANGUAGE', $book_lang); 
if ($pub_year != 'all') $this->db->where('b.PUB_YEAR', $pub_year); 

$query = $this->db->get(); 

想了解更多关于笨的Active Record类,请访问文档:
http://codeigniter.com/user_guide/database/active_record.html