2

ID のリストを取得するクエリがあります。これらの ID は配列内にあり、それらの ID で別のテーブルを検索する必要があります。implode を使用して、これらの ID を where 句で使用できる文字列にしようとしましたが、このエラーが発生し続けます。

私の現在のコードは次のとおりです。

 $query = $this->db->query('
        SELECT *
        FROM system_scoperights
        WHERE user = '. $this->session->userdata('username') .'
    ');

    foreach ($query->result() as $row) {
        $scope = $row->site;
        $data[] = $scope;
    } 
    $dataScope[] = $data;

    $idList = implode(',', $dataScope);   <---- Error Line

    $where = 'WHERE scope_scopes.sc_ID IN '. $idList .'';

次のようなフォーラムで見つけたさまざまなことを試しました。

 $idList = implode(',', array_values($dataScope));

 $idList = implode(',', join($dataScope));

しかし、それらのどれも機能しません。(結合機能は聞いたこともありません)

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

4

2 に答える 2

10
$dataScope[] = $data;

しかし

$data[] = $scope;

したがって$dataScope、その配列内に配列があります。implode1つのレベルでのみ機能するため、このエラーが発生する理由.

これは実際には SQL で可能であることに注意してください。

 SELECT * FROM some_table WHERE id IN (SELECT site FROM another_table WHERE ... )

これにより、このコードの必要性が完全になくなります。

あれは:

$where = 'WHERE scope_scopes.sc_ID IN (SELECT site
                                       FROM system_scoperights
                                       WHERE user = '. $this->session->userdata('username') . ')';
于 2012-07-16T18:36:47.087 に答える
3

私はジェイの答えに部分的に同意します...行を削除するだけです:

$dataScope[] = $data

$dataすでに配列であるため、変数を直接使用します。

$idList = implode(',', $data);

ただし、where句で(および)を使用する必要もあります。

$where = 'WHERE scope_scopes.sc_ID IN (' . $idList . ')';

where句でサブクエリを使用すると、サブクエリが使用されることもありますが、特に'SELECT *'を使用すると、多くのオーバーヘッドが発生する可能性があります。dbテーブルから必要以上のものを要求しないでください:)

于 2012-07-16T18:44:36.673 に答える