从codeigniter中的$_GET数据在数据库中的最小值和最大值之间搜索

7y4bm7vi  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(106)

我有一个表单,在提交后,我的控制器从该表单中获取数据,并发送给模型,以便根据_GET信息从数据库中检索结果。
在我的表单中有两个字段,分别叫做min-year和max-year,我用它们在数据库的year列中搜索这些数字之间的值。提交后,_GET数组类似于'min-year'=>'something''max-year'=>'something'
在提交之后,_GET数组类似于'min-year'=〉'something'和'max-year'=〉'something'。
HTML:

<input type='text' name='state' />
<input type='text' name='min-year' />
<input type='text' name='max-year' />

控制器:

$this->load->model('carinfo_model');
$where=($this->input->get());
$data['cars']=$this->carinfo_model->all_ad($where);

型号:

public function all_ad($where){
->select("*")
->from("cars")
->where($where)         
$result=$this->db->get()->result_array();
return $result;
}

要将_GET数组转换为'->where()'可读的内容,以便在数据库的所有其他列以及年份列中的最小值/最大值之间进行搜索,最快的方法是什么?
我需要一个正确的方法来创建一个**'where'语句(字符串或数组),它包含所有其他输入字段加上一个'between'语句**,如果可能的话,所有这些都在一个来自$_GET信息的查询中

如果min-year、max-year或两者或任何其他字段由空值提交,则结果应基于其他字段,并且仍应能够从数据库中获取结果

请注意,我有这么多的其他输入字段,这只是表单的一部分。

5rgfhyps

5rgfhyps1#

在视图中

<a href="<?php echo base_url() ?>Controller/Method/MinYear/MaxYead"></a>
<a href="<?php echo base_url() ?>welome/diff/2013/2016"></a>

在控制器中

public function diff($min, $max) # Informing method there can be 2 input parameter from URL.
{
    $now = date("Y");
    $minYear = date_format('Y-m-d', $min.'-01-01');
    $maxYear = ($now == $max) ? date("Y-m-d") :  date_format('Y-m-d', $max.'-12-31');

    # in $maxYear if year is current year we cant take 2016-12-31. So we use Current timestamp.
    # If its not current year then we use 12-31. Ex 2014-12-31

}

**注意:**我没有测试这个代码与您的目的。有时,如果日期不工作在$minyear使用与date()函数一样$minYear = date(date_format('Y-m-d', $min.'-01-01'));

编辑01**

public function diff()
{
    $min = $this->input->get('min-year');
    $max = $this->input->get('max-year');
    $state = $this->input->get('state');  # updated

    $now = date("Y");
    $minYear = date_format('Y-m-d', $min.'-01-01');
    $maxYear = ($now == $max) ? date("Y-m-d") :  date_format('Y-m-d', $max.'-12-31');

    $data['cars'] = $this->carinfo_model->all_ad($minYear, $maxYear, $state);  # updated
}

在模型中

public function all_ad($minYear, $maxYear, $state)  # updated
{
    $this->db->select(*);
    $this->db->from('cars');
    $this->db->where('field_name BETWEEN date($minYear) AND date($maxYear)');
    $this->db->where('field_name', $state ); # updated
    $query = $this->db->get();
    $result = $query->->result_array();
    return $result;
}
whitzsjs

whitzsjs2#

试试这个。这是一个控制器函数代码。把它粘贴到你的控制器函数中,然后像你的数据库表字段名一样改变字段名。

$a = $this->input->get();
    $state = $a['state'];
    $min_yr = $a['min-year'];
    $max_yr = $a['max-year'];

    $where = "(field_name BETWEEN '$min_yr' AND '$max_yr') AND state = '$state'";

在模型函数中发送where子句。

ffdz8vbo

ffdz8vbo3#

你可以做一些像下面这样的事情。
在控制器中,获取不同变量中的两个值,如下所示:

$min_year = $this->input->get('min_year');
$max_year = $this->input->get('max_year');

然后将此变量传递到模型函数中,如下所示:
$this-〉模型名称-〉函数名称($min_year,$max_year);
在模型间使用查询如下:

$sql = "SELECT * FROM table_name
WHERE year BETWEEN $min_year AND $max_year";
$result = $this->db->query($sql)->get()->result_array();

在$result中,您将得到您的结果。

5jdjgkvh

5jdjgkvh4#

试试这个。这是一个控制器函数代码。把它粘贴到你的控制器函数中,然后像你的数据库表字段名一样改变字段名。

$a = $this->input->get();
    $state = $a['state'];
    $min_yr = $a['min-year'];
    $max_yr = $a['max-year'];

    $where = "(field_name BETWEEN '$min_yr' AND '$max_yr') AND state = '$state'";

在模型函数中发送where子句。

相关问题