Codeigniter 2.1 - zurück-ids nach dem einfügen batch
Wie kann ich wieder alle IDs nach insert_bunch? Funktion:
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);
}
was passiert, wenn ein run-single legen Sie zusammen mit batch einfügen? erhalten die richtige ID? zum Beispiel batch ausgeführt wird und die ids aus der Tabelle kommt wie - 1,2,3,4 -, Einzel-legen Sie hier 6. Wird es wieder - 1,2,3,4,6 1,2,3,4,5,6 oder auf batch einfügen? Verweis auf Alester Antwort, vielleicht wissen Sie
InformationsquelleAutor Sasha | 2013-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine effiziente Methode:
Da Ihre Aufzeichnungen haben ergeben ID ' s, ich werde davon ausgehen, dass Sie auch auto-increment.
Wenn dies der Fall ist, tun Sie dies und noch insert_batch.
Hier ist was Sie tun:
1. Sie nehmen eine Anzahl der Elemente, die Sie einfügen:
2. Führen Sie den Stapel legen:
3. Holen Sie sich die erste eingefügte ID deiner batch:
4. Fügen Sie die Anzahl (minus 1) auf Ihr insert ID, um die letzten Einträge ID.
Dort gehen Sie! Sie haben nun die erste und die Letzte ID der eingefügten Datensätze, und durch die Erweiterung, alles andere dazwischen.
Hinweis:
Ein paar Leute haben gefragt, was passieren könnte, wenn sich zwei batch-inserts gleichzeitig geschehen; InnoDB wird intelligent verwalten die ID ' s der neuen Zeilen, um zu verhindern, dass die Daten, die sich überschneiden, damit diese Methode gültig.
Was passiert, wenn es 2 insert-Abfragen gleichzeitig?
das, was ich mir denke. Was passiert, wenn 2 Benutzer legen Sie zwei Abfragen gleichzeitig. Hilfe?
Für 2 einfache Abfragen, ich denke, Sie bekommen in der Warteschlange. Aber was passiert, wenn 2 batch-Abfragen einfügen schneiden gleichzeitig?
Meines Wissens innoDB verwaltet die Verteilung der Daten richtig um zu verhindern, dass Daten verschneiden.
InformationsquelleAutor Stonestorm
Diesem Thema mit Bezug zu MySQL wurde vorher besprochen:
Wie kann ich Einfügen viele Zeilen in einer MySQL-Tabelle und die Rückkehr der neuen IDs?
In CodeIgniter, mit
$this->db->insert_id()
zurückkehren wird nur die id der ersten einfügen.Wenn ich das machen würde, würde ich öffnen Sie eine Transaktion und machen die wird eine auf Zeit, und speichern Sie die id nach jedem einfügen.
Wie ist es besser? Einzelne Einsätze ist ein lächerlich ineffiziente und langsame Methode.
InformationsquelleAutor Marc Audet
1.Erstellen Sie eigene ID-anstelle von auto-generierte.
2.Legen Sie mit der id, die Sie haben genereated
3.Ein array eingefügte ID
4.Return das array eingefügte ID
InformationsquelleAutor Ganesh RJ
insert_batch () - Funktion zurückgeben, wird nur die erste id von Ihrem Stapel.
insert () - Funktion in der for-Schleife, um alle id ' s.
public function insert_slike($id, $slike, $Ordner, $polje, $tabela) { $slike = explode(',', $slike); $Daten = array(); $ids = array(); foreach ($slike als $slk) { $this->img_upload_resize($slk, $Ordner); $data = array( $polje => $id, 'path' => $slk ); $dies->db->insert($tabela, $Daten); $ids[]=$this->db- > insert_id(); } }
InformationsquelleAutor Roshan Deshmukh
Stimme ich mit Marc. Die CI insert_batch ist nur verwenden Sie foreach zu tun, jeder einfügen, so dass, wenn Sie mit der Transaktion zu tun, diese Dinge. Sie erhalten die gleiche Wirkung oder bessere Wirkung und auch Sie können alle insert_id nach einfügen.
CI insert_batch() ist NICHT eine foreach - Next Zeit, die Sie verwenden insert_batch(), versuchen Sie den Aufruf last_query() und Sie werden sehen,
InformationsquelleAutor Roy Chen