我可以在阵列中设置多个Codeigniter Where条件吗?

时间:2013-03-02 22:46:33

标签: php mysql codeigniter

我正在尝试从满足多个数组标准的数据库中获取数据。

数组是这样的:

Array ([21] => 1,[23] => 0,[19] => 1);

密钥为问题ID,值为yes或no。

我需要找到question_id = 21的值为1的电影,question_id = 23的值为0question_id = 19的值为{{1} }}。我存储它的方式是这样的:

enter image description here

所以我的第一个想法是获取每个数据,然后将它们放在一个更大的数组中。如果电影显示与数组中元素数量相同的次数,那么我认为它是一个很好的匹配。但这似乎效率低下。我宁愿找到符合标准的电影。

由于1个记录的值相同,有没有办法写这样的东西?:

movie_id

这背后的想法是创建所有foreach($array as $key=>$value){ $i++; $this->db->where('question_id', $key); $this->db->where('value', $value); } $this->db->from('movies_values'); $query = $this->db->get(); $res = $query->result(); array_push($main,$res); s的循环。然后使用值来运行查询。这似乎不起作用,我还能做些什么吗?

5 个答案:

答案 0 :(得分:1)

如何使用WHERE IN(array())?

来自CI User Guide

$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')

答案 1 :(得分:1)

对列表使用where_in方法:

$this->db->where_in('value', $array);

答案 2 :(得分:0)

尝试这样做。

$where = WHERE 1
foreach($array as $key=>$value){
   $where .= " AND(question_id = $key AND value = $value)";
}

$this->db->where($where);

PS。 $ i ++在你的循环中究竟做了什么?

答案 3 :(得分:0)

我认为这是正确的方法,你应该注意使用“或”代替使用完整的“ands”,因为逻辑问题,这种方式不会返回任何行(我的意思是question_id = 1和value = 1和question_id = 2和value = 0由于告诉我们想要question_id = 1而question_id = 2将不匹配任何东西,我们会不一致!这同样适用于“值”)。

        $array = array(21 => 1,23 => 0,19 => 1);
        $where = array();
        foreach($array as $key => $value) {
            $where[] = "(question_id=$key and value=$value)";
        }
        var_dump($where);
        foreach ($where as $value) {
            $this->db->or_where($value);
        }
        $q = $this->db->get('movies_values')->result();
        var_dump($q);
        echo $this->db->last_query();exit;

答案 4 :(得分:0)

这可以在没有循环的情况下轻松完成:

$filter = array(21 => 1,23 => 0,19 => 1);

$values = implode(',',array_unique(array_values($filter))); // results into 0,1...
$keys   = implode(',',array_unique(array_keys($filter))); // results into 19,21,23...

$result = $this->db
              ->query("select * from movies_values
                         where 
                            question_id in(".$keys.")
                            and value in(".$values.")")
              ->result();

快乐编码---> :)