9

insert_bunch の後にすべての ID を返すにはどうすればよいですか? 関数:

public function insert_slike($id, $slike, $folder, $polje, $tabela)
{
        $slike = explode(',', $slike);
        $i = 1;
        $data = array();
        foreach ($slike as $slk) {
            $this->img_upload_resize($slk, $folder);
            $data[] = array(
                $polje => $id,
                'path' => $slk
                );
            $i++;
        }

        $this->db->insert_batch($tabela, $data);
}
4

4 に答える 4

17

効率的な方法は次のとおりです。

レコードには結果 ID があるため、それらも自動インクリメントされると仮定します。

この場合は、これを行い、引き続き insert_batch を使用します。

これがあなたがすることです:

1.挿入するアイテムの数を数えます。

$count = count($data);

2.バッチ挿入を実行します。

$this->db->insert_batch($table, $data);

3 . バッチの最初に挿入された ID を取得します。

$first_id = $this->db->insert_id();

4.挿入 ID にカウント (マイナス 1) を追加して、最後のレコード ID を取得します。

$last_id = $first_id + ($count-1);

ほら!これで、挿入されたレコードの最初と最後の ID、およびその間のすべての ID が得られました。

ノート:

2 つのバッチ挿入が同時に行われるとどうなるか、何人かの人が尋ねました。InnoDB は新しい行の ID をインテリジェントに管理してデータの交差を防ぎ、このメソッドを有効に保ちます。

于 2016-05-06T14:35:37.737 に答える
3

MySQL に関するこのトピックは、以前に説明されています。

MySQL テーブルに多くの行を挿入して新しい ID を返すにはどうすればよいですか?

CodeIgniter では、使用$this->db->insert_id()すると最初の挿入の ID のみが返されます。

これを行う場合、トランザクションを開いて一度に 1 つずつ挿入を行い、各挿入の後に ID を保存します。

于 2013-03-28T15:46:26.113 に答える
0

1.自動生成されたIDではなく、独自のIDを作成します。

2.生成したIDを挿入

3.挿入されたIDの配列を持つ

4.挿入されたIDの配列を返す

于 2013-03-30T09:12:48.900 に答える
0

insert_batch() 関数は、バッチの最初の ID のみを返します。for ループで insert() 関数を使用して、すべての ID を取得します。

public function insert_slike($id, $slike, $folder, $polje, $tabela)
{
    $slike = explode(',', $slike);
    $data = array();
    $ids = array();
    foreach ($slike as $slk) {
        $this->img_upload_resize($slk, $folder);
        $data = array(
             $polje => $id,
             'path' => $slk
             );
        $this->db->insert($tabela, $data);
        $ids[]=$this->db->insert_id();
    }
}
于 2017-09-15T11:43:15.323 に答える