4

これまでのところ、この問題に対していくつかの異なるアプローチを試みましたが、解決策はありません。次のエラー メッセージが表示されます。

「where句」の不明な列「配列」

SELECT * FROM ( Articles) WHERE idIN (配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列、配列)

ここに私のモデルコードがあります:

function getStarNews($user_id) {
    $this->db->select('id');
    $this->db->where('user_id', $user_id);
    $query = $this->db->get('table1');

    foreach ($query->result_array() as $id)
    {
        //echo $id['id']."<br>"; //displays all of the correct ids I am trying to pass to the where_in()
    }
    $id = $query->result_array();

    $this->db->where_in('id', $id); //pass array of 'id' from above query
    $data = $this->db->get('Articles');

    return $data->result_array();
}

1 つの値のみを含むように id 配列を変更すると、where_in() 句が正常に機能し、単一の「id」に一致するデータの行が出力されます。

where_in() を使用する際の助けを求めてスタックとグーグル全体を見てきましたが、すべてが正しいか、配列を正しく渡すためにいくつかの異なる方法を試したと思います。

助けてくれてありがとう。

編集:最後に、次を使用してコントローラーでこのデータを出力します。

$this->output->set_output(json_encode($data));

テスト目的で、JSON をスキップして、PHP を使用してモデルから直接データを出力しようとしました。

4

1 に答える 1

16

渡そうとする配列は多次元配列です。代わりにこれを試してください:

$ids = 配列();
foreach ($query->result_array() を $id として)
    {
        $ids[] = $id['id'];
    }

$this->db->where_in('id', $ids);

繰り返しなしで query->result_array() を平坦化することはできません。ただし、アプリケーションでこの種のクエリを頻繁に処理する必要があり、PHP 5.3 以上がインストールされている場合は、次の関数を Codeigniter ヘルパー ファイル (または他の適切な場所) に配置して、配列をフラット化するのに役立てることができます。

関数 flatten(配列 $配列) {
    $return = 配列();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    $リターンを返します。
}

そして、あなたの場合、次のように使用します:

    $ids = flatten($query->result_array());
    $this->db->where_in('id', $ids);
于 2013-06-18T23:24:22.447 に答える