我正在尝试创建一个只根据许多条件创建数组的SQL查询和/或php代码。我有一个像这样的数组:
Array ( [1] => 1 [8] => 0 [2] => 1 )
The [1] refers to 'question_id' with the 1 being a 'value'
The [8] refers to 'question_id' with the 0 being a 'value'
The [2] refers to 'question_id' with the 1 being a 'value'
我的数据库设置如下,当我调用它时,我试图得到一个只有满足以上所有^的movie_ids的数组。所以说数组有[8] => 0. question_id应为8,与该记录对应的值应为0.所以说数组有1 => 0. question_id应为1,并且与该记录对应的值应为0.如果它满足该对,并且在其之前配对,则应将该记录添加到该数组。
我试过这个,我使用的是Codeigniter:
foreach($array as $key=>$value){
$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_array,$res);
}
$ main_array是一个空数组。 $ array是一个类似上面的数组。 但问题是,它检查了一对,所以说1 => 0如果匹配,则添加。而不是检查它是否匹配[8] => 0和[2] => 1。
答案 0 :(得分:2)
您可以遍历数组以构建完整的CASE
语句
$query = <<<SQL
SELECT
movie_id, question_id, value
FROM
t1
WHERE
CASE
SQL;
$params = array();
foreach ($array as $question_id => $value) {
$query .= " WHEN question_id = ? THEN value = ? ";
$params[] = $question_id;
$params[] = $value;
}
$query .= " END";
答案 1 :(得分:0)
我的建议是在where_in();语句中使用$array
中的数据,这样就可以避免在循环中运行SQL查询。
$this->db->where_in('question_id', array_keys($array) );
$this->db->where_in('value', array_values($array) );
相当于:
SELECT * FROM <table> WHERE question_id IN (array_keys($array)) AND value IN (array_values($array));