2017-07-03 10 views
3

2つ以上のテーブルがありますが、取り出し中に2,00,000データベースからのレコードが予想以上に時間がかかるので、サブクエリに変換する必要がありますか?SQL(laravelコントローラ)のサブクエリに変換する

次のコード:

->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

私は、クエリからデータを取得しながら、2,00,000はあまりないと思います。しかし、カスタムメソッドやループでデータを処理するには時間がかかります。 JSONにこのデータを取得中 –

+0

ええおかげ@Sagarゴータムは、実際に私は、array_mapを()とarray_uniqueメソッドを持っています。 –

+0

だから、あなたはそれが、私は特定のクエリにORDER BY句を使用する場合、それはORDER BY句なしで、あまりにも多くの時間を割いてますちなみに最初のではなく、クエリの最適化 –

答えて

1

あなたはこれらすべてがdatajsonqueryで取得が必要な場合は、

LaravelはtoArray()機能と同様toJson()機能を提供します。 docs hereを参照してください。あなたはこのようなクエリの最後にtoJson()を追加する必要があります。

->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(); 

この方法では、あなたが直接json形式にフェッチされたデータを変換することができます。

関連する問題