1

多くの基準に基づいて配列のみを作成する 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 で、そのレコードに対応する値である必要があります。ペアとその前の他のペアに一致する場合、そのレコードを配列に追加する必要があります。

私はこれを試しました、私は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 つのペアをチェックするので、1 => 0 と言って、一致する場合は追加されることです。[8] => 0 および [2] => 1 にも一致することを確認するのではなく。

ここに画像の説明を入力

4

2 に答える 2

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

于 2013-02-24T00:33:45.963 に答える
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));

于 2013-02-24T01:05:22.813 に答える