-1

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

我以为我可以使用某种 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; ?>
4

3 回答 3

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

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

于 2012-12-05T02:27:49.340 回答
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();
}
}

如果您将通配符作为默认值提供值,则可以为空(实际上两者都可以为空以返回所有结果),然后只需在双引号内构建整个 where 语句。

如果您不想在字符串为空的情况下返回所有结果,那么您实际上不必提供通配符,但是您应该在某处检查空结果或不返回。

于 2012-12-04T22:34:26.983 回答
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

于 2012-12-04T20:08:50.697 回答