我正在尝试从满足多个数组标准的数据库中获取数据。
数组是这样的:
Array ([21] => 1,[23] => 0,[19] => 1);
密钥为问题ID,值为yes或no。
我需要找到question_id = 21
的值为1
的电影,question_id = 23
的值为0
,question_id = 19
的值为{{1} }}。我存储它的方式是这样的:
所以我的第一个想法是获取每个数据,然后将它们放在一个更大的数组中。如果电影显示与数组中元素数量相同的次数,那么我认为它是一个很好的匹配。但这似乎效率低下。我宁愿找到符合标准的电影。
由于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的循环。然后使用值来运行查询。这似乎不起作用,我还能做些什么吗?
答案 0 :(得分:1)
如何使用WHERE IN(array())?
$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();
快乐编码---> :)