【问题标题】:Search between min and max in database from $_GET data in codeigniter从 codeigniter 中的 $_GET 数据在数据库中的最小值和最大值之间搜索
【发布时间】:2016-01-30 00:49:52
【问题描述】:

我有一个表单,提交后我的控制器从该表单获取数据并发送到模型以根据_GET 信息从数据库中检索结果。

在我的表单中,有两个字段称为 min-year 和 max-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 数组转换为'-&gt;where()' 在所有其他列以及数据库中年份列的最小值/最大值之间搜索的可读数组的最快方法是什么?

我需要一个正确的方法来创建一个 'where' 语句(字符串或数组),它包含 所有其他输入字段加上一个'between'语句,全部在如果可能,从 $_GET 信息中查询一个

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

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

【问题讨论】:

  • 也向我们展示您的代码

标签: database codeigniter search max min


【解决方案1】:

可见

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

【讨论】:

  • 感谢您的回复。但是我的输入只是一个像 1982 这样的数字,并且不是日期格式,所以我只需要一种方法将该数组转换为在数字之间搜索的东西
  • $min$max 只是一个 4 值数字。这意味着它只是一年。所以我给了你剩下的代码。您所要做的就是使用 Mysql Between 函数添加该日期,并可以检索您的所有数据。
  • 似乎接近我需要的,但其他输入呢?我在 html 表单中添加了另一个输入。请检查一下,看看如何处理不在条件之间的其他输入字段,在 ->where 语句中?
  • U 可以将状态作为查询@webarch 中的其他输入传递...无论如何,再一次好的 CI GURU abdulla
  • 如果没有提交 min-year 和 max-year ,我想根据其他字段检索结果,因此 where 语句不应依赖于任何特定字段。
【解决方案2】:

试试这个。这是一个控制器功能代码。将此粘贴到您的控制器函数中并更改字段名称,如您的数据库表字段名称。

    $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 子句。

【讨论】:

  • 如果表单提交的 min-year 或 max-year 为空怎么办?在我的情况下,where子句仍应根据其他输入字段返回结果。您是否还意味着如果我有其他输入,我必须将它们一一放入一些变量中并按照您所说的发送到 where 语句?跨度>
  • if(condition) 中创建 where 子句。检查变量是否为空。您可以一一添加其他输入,然后添加AND
【解决方案3】:

您可以执行以下操作。

在控制器中获取不同变量中的两个值,如下所示:

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

然后将此变量传递给您的模型函数,如下所示:

$this->model_name->function_name($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 中你会得到你的结果。

【讨论】:

  • 您的代码没问题,但您没有在 where 子句中提及其他输入。我需要使用表单中的所有输入来执行此查询的最佳方法,而不仅仅是 min 和 max
  • 您只需在 BETWEEN 之前添加您的条件。
  • 例如有些人这样认为 $sql = "SELECT * FROM table_name WHERE $i
  • 感谢您的回复。你的解决方案也是正确的。
【解决方案4】:

试试这个。这是一个控制器功能代码。将此粘贴到您的控制器函数中并更改字段名称,如您的数据库表字段名称。

  $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 子句。

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 2018-04-09
    • 1970-01-01
    • 2013-06-05
    • 2019-01-02
    • 2019-05-04
    • 2020-06-11
    • 2017-10-09
    • 2015-03-26
    相关资源
    最近更新 更多