【问题标题】:Select from multiple database by filters通过过滤器从多个数据库中选择
【发布时间】:2015-11-18 07:40:34
【问题描述】:

我的网站网址如下所示:

http://example.com/realestate/type-apartament/rooms-3-2/key-value1-value2-value3

所以从这里我得到一个这样的数组:

[type] => Array
    (
        [0] => apartament
    )

[rooms] => Array
    (
        [0] => 3
        [1] => 2
    )

[key] => Array
    (
        [0] => value1
        [1] => value2
        [2] => value3
    )

我从 db 中的选择应该如下所示:

Select * from properties a
LEFT JOIN properties_type b
ON a.property_type_id = b.property_type_id
WHERE b.property_type = apartament
AND a.rooms = 3 AND a.rooms = 2

如何根据我拥有的键值生成此选择?我唯一想到的解决方案是使用每个键和相应的表、外键、列创建一个数组助手......

这是我处理来自 url 的过滤器的函数:

if(!function_exists('process_filters')) {

    function process_filters($filters) {
        $data = array();
        foreach($filters as $filter):
            $filter_exploded = explode('-', $filter);
            $val = array_shift($filter_exploded);
            $data[$val] = $filter_exploded;
        endforeach;
        return $data;
    }

}

$filters 来自控制器方法的地方:

public function index(...$params)

【问题讨论】:

  • 不确定我了解您的了解程度,您有包含值的数组吗?或者是什么?您能否向我们展示您已经取得了多远/您尝试了什么的代码?
  • 我编辑了我的代码,请检查

标签: php mysql codeigniter activerecord


【解决方案1】:

我会假设您的过滤器已经设置在 $filter 变量中。 那么你需要调用你的过滤器模型。例如,我假设您的型号名称是 Filter_model 那么你需要像这样从你的控制器调用 model_filter:

$this->load->model('Filter_model');
$result = $this->Filter_model->model_filter($filter); 

function model_filter($filter)
{
    $this->db->select('*');
    $this->db->from('properties');
    $this->db->join('properties_type', 'properties.property_type_id = properties_type.property_type_id', 'left');
    foreach ($filter as $key => $index) 
    {
        foreach ($index as $number => $value)
            $this->db->where($key => $value);
    }
    $data = $this->db->get()->result_array();

    return $data;
}

【讨论】:

  • 好的,但是如果我有 20 个过滤器,我应该加入所有 10 个表吗?我想只有在应用过滤器的情况下才加入。而$this->db->where($key => $value); $key 并不总是与列名相同。
  • 是不是所有的表总是有property_type_id?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2011-07-11
  • 2011-10-01
  • 1970-01-01
  • 2011-06-30
  • 2018-06-15
  • 2020-03-17
相关资源
最近更新 更多