2017-07-03 1 views
3

Ich habe mehr als zwei Tabellen, während 2,00,000 Datensätze aus der Datenbank zu viel Zeit zu nehmen, was ich erwarte, so muss ich es in Unterabfragen konvertieren?Convert Joins zu Unterabfragen in SQL (Laravel Controller)

Der folgende Code:

->join('track_details','track_details.code','=',$esealTable.'.primary_id') 
->join('track_history as th','th.track_id','=','track_details.track_id') 
->join('locations as l','l.location_id','=','th.src_loc_id') 
->join('products','products.product_id','=',$esealTable.'.pid') 
->where(['level_id'=>0, 'products.product_type_id'=>8003]) 
->whereIn('l.location_type_id',[741,744]) 
->whereIn('th.transition_id',[537,569]); 
->get(['primary_id as iot','products.material_code','th.sync_time as datetime']) 
->take(200000); 
+0

Ich denke, 2,00,000 ist nicht zu viel, während Sie Daten aus der Abfrage abrufen. Aber es dauert Zeit, während Sie Daten mit benutzerdefinierten Methoden und Schleifen verarbeiten. –

+0

yeah thanks @Sagar Gautam Eigentlich habe ich array_map() und array_unique Methoden beim Abrufen dieser Daten nach json. –

+0

So müssen Sie nach besseren Weg suchen, um Daten zuerst als Abfrage-Optimierung abzurufen –

Antwort

1

Wenn Sie alle diese benötigen data abgerufen mit query in json,

Laravel bietet toJson() Funktion ähnlich toArray() Funktion. Siehe Dok. here. Sie müssen nur toJson() am Ende der Abfrage wie folgt hinzuzufügen:

->join('track_details','track_details.code','=',$esealTable.'.primary_id') 
... 
... 
.. 
->get(['primary_id as iot','products.material_code','th.sync_time as datetime']) 
->take(200000) 
->toJson(); 

Auf diese Weise direkt abgerufenen Daten zu json Format umwandeln kann.