2017-11-14 1 views
1

Ich habe eine Datei mit mehr als 360.000 Zeilen, jede Zeile ist ein JSON.PHP-Inhalt in mehrere Talben

las ich die Json in PHP-Variablen und in zwei Tabellen einfügen

"Filme" und "movies_details"

i bin mit Laravel 5.4. Mein Problem ist die Leistung. , so kann ich etwa 35-40 Zeilen in einer Minute einfügen Runde mit diesem Code

$idMovie = DB::table('movies') 
    ->insertGetId([ 
     'moviedb_id' => $id, 
     'adult' => $adult, 
     'created_at' => $dateTime, 
    ]); 
    DB::table('movies_title') 
     ->insert([ 
      'movie_id' => $idMovie, 
      'original_title' => $original_title, 
      'created_at' => $dateTime, 
     ]); 

aber ich, was jemand weiß, einen schnelleren und besseren Weg, dies einzufügen.

Danke für Ihre Zeit.

+0

MySQL unterstützt Multi Einsatz wie so 'INSERT INto movie_title (movie_id, original_title, created_at) WERTE (1, 'title', '2017-11-14'), (2, 'title', '2017-11-14') '.... und so weiter. Dies könnte helfen https://stackoverflow.com/questions/29723865/how-to-insert-multiple-rows-from-a-single-query-using-eloquent-fluent –

+0

Haben Sie in der 'Chunk'-Methode untersucht? – Kisaragi

+0

@RaymondNijland Ja, ich habe diesen Link gesehen. Mein Problem mit dieser Verbindung ist: sie haben nur eine Tabelle, um dort Daten einzufügen. aber ich brauche die eingefügte ID aus der "Movie" -Tabelle, um sie mit den Zeilen in "movie_details" -Tabelle zu belegen – Damlo

Antwort

0

Sie mehrere Insert (bulk insert) unter der Annahme, verwenden könnten Sie Ihre Vars ein Array zuweisen können

wie in flachen SQL

insert into your_table (moviedb_id, adult, created_at) 
    values ($id[0], $adult[0], $dateTime[0]), 
      ($id[1], $adult[1], $dateTime[1]), 

      ...... 
      ...... 
      ($id[n], $adult[n], $dateTime[n]) 

mit jedem auf diese Weise fügen Sie weitere Zeilen einfügen und statt 30 - 40 für Minute können Sie Einsatz 30 * n - 40 * n Zeilen

so prüfen für yout ORM oder Rahmen Query-Manager für die entsprechende Funktion