2012-12-04 48 views
-1

基本上通过显示一个表单,其中用户可以输入2个变量$ no和$ first,但我只能在输入两个字段时显示结果。我需要它的工作,所以当我输入1个变量时,它会显示结果。Codeigniter搜索查询不能正常工作

我想我可以使用某种OR语句,但我不确定如何实现它。任何帮助将不胜感激,我很抱歉,如果它不够清楚,我谈到codeigniter时是相当新的。

控制器

public function query() 

{ 

$no = $this->input->post('no'); 
$first = $this->input->post('first'); 
$this->load->model("test"); 
    $data['query']=$this->test->query($no,$first); 
    $this->load->view('query',$data); 

} 

型号

function query($no, $first) 
{ 

return $query = $this->db->get_where('table', array('no' => $no, 
'first' => $first))->result(); 

} 

查看

<?php foreach($query as $row): ?> 
<tr> 
<td><?php echo $row->no; ?></td> 
<td><?php echo $row->date; ?></td> 
<td><?php echo $row->first; ?></td> 


</tr> 
<?php endforeach; ?> 

回答

1

您可以尝试准备在where子句第一

function query($no = "", $first = "") 
{ 
$response = array(); 
if($first != "" || $no != ""){ 
    $where = ""; 
    if($no == "") $where = 'first = '.$first; 
    if($first == "") $where = 'no = '.$no; 
    if($first != "" && $no != "") $where = 'no = '.$no.' AND first = '.$first; 
    $fetch = $this->db->where($where)->from('table')->get(); 
    if($fetch->num_rows() > 0) $response = $fetch->result_array(); 
} 
return $response; 
} 

希望我得到你想要的想法。

0

您需要分离出你的WHERE参数:

function query($no, $first) 
{ 
    $this->db->select(); 
    $this->db->from('table'); 
    $this->db->where('no', $no); 

    if (!empty($first)) 
    { 
     $this->db->or_where('first', $first); // or use `and_where` 
    } 
    return $query = $this->db->get()->result(); 
} 

来源:http://ellislab.com/codeigniter/user-guide/database/active_record.html

+0

只有在no等于$ no的情况下才有效,我读到他需要或者需要的问题。 –

0
function query($no = '%', $first = '%') 
{ 
$this->db->where("'no' = $no OR 'first' = $first"); 
$query = $this->db->get('table'); 
if($query->num_rows() >= 0) 
{ 
    $return $query->result(); 
} 
} 

如果你喂值的通配符为默认值或者可以是空的(其实都可以是空的,返回的结果)然后就构建整个地方双引号内声明。

如果你不想返回所有的结果如果字符串是空的,你真的不必喂养通配符,但你应该做一些检查空的结果或没有回报的地方。