查找符合所有条件的记录的通用ID - 如何构建查询?

时间:2013-02-24 00:24:29

标签: php mysql codeigniter

我正在尝试创建一个只根据许多条件创建数组的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。

enter image description here

2 个答案:

答案 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";

http://sqlfiddle.com/#!2/741ff/2

答案 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));