プロが教える店舗&オフィスのセキュリティ対策術

Laravelにて複数条件での検索機能を作成しており、
DBより複数条件での結果取得を行いたいのですが、
現状ForeachでSQLを大量生成してしまっているのでなんとかしたいです。

検索条件「A,B,C,・・・」

検索IDがAかつ最新日付を1件
または
検索IDがBかつ最新日付を1件


質問者からの補足コメント

  • foreach($SearchList as $val){

    $ResultList[] = Location::leftJoin('A_categories','location.A','=','B_categories.B')
    ->select('A.*','B.*')
    ->where('id', $val"])
    ->orderBy('date','DESC')
    ->first();
    }

    これをForeachを使わず一つのクエリで実行したいと考えております。。。
    N+何とか問題です。。

      補足日時:2021/03/19 10:24

A 回答 (4件)

SQLだけで言えば、inを使いたいということでしょうか。



LarabelでSQLにどのようなプログラムで書いてるか、もうすこし具体的に質問のポイントがあるとありがたいです。

ちなみに、繰り返し回数が何回かわかりませんが、SQLは一般的に以下のコストが高いです。

<高い>
・接続
・(ものによっては)コミット

<中>
・複雑なSQLの初回実行

単純に一部の変数が変わっただけだと、接続が共有されてればそれほどコストが高くない可能性もあります。
    • good
    • 1

https://readouble.com/laravel/5.7/ja/queries.html

中盤辺りの whereIn が該当するのかな?
    • good
    • 1

>最新日付を1件



ここは共通って事なのですかね?
それとも検索ID毎に最新日付でした?

前者ならもう一つの条件を配列化するとか?
https://www.it-swarm.jp.net/ja/php/%E3%82%92%E4% …

でも既に行っているのでしょうか>
    • good
    • 1

対象のID群を使って、ID順日付順の一時表を付くって


そこから拾うとか?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す