1

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

数组是这样的:

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

键是问题 ID,值是是或否。

我需要找到 value for question_id = 21is 1、 value for question_id = 23is0和 value for question_id = 19is的电影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);

这背后的想法是创建所有WHEREs 的循环。然后使用那些 where 值运行查询。这似乎不起作用,我还能做些什么吗?

4

5 回答 5

1

使用 WHERE IN (array()) 怎么样?

CI 用户指南

$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')
于 2013-03-02T23:25:34.670 回答
1

使用where_in列表的方法:

$this->db->where_in('value', $array);
于 2013-03-02T23:29:49.570 回答
0

尝试这样做。

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

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

PS。$i++ 在你的循环中到底在做什么?

于 2013-03-02T23:15:02.927 回答
0

我认为这是正确的方法,您应该注意使用“或”而不是使用完整的“和”,因为逻辑问题不会返回任何行(我的意思是 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;
于 2013-03-03T02:40:45.990 回答
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();

快乐编码---> :)

于 2013-03-03T12:09:17.097 回答