プログラミングしているサイトに問題があります。ページと子ページがあるサイト セクションでは、処理が少し遅くなります。特にこのセクションには多くの mySQL クエリがあります。同時に実行されるクエリが 20 を超えているため、何かが表示されるまで最大 5 秒待たなければなりません。
この質問を読みましたページの読み込みごとに20個のSQLクエリは本当に多く考慮されていますか? そして、私には実際に問題があることがわかりました...そしてmadlepの答えは、すべてのページのforeach内でデータベースにクエリを実行し、その子を探しているこのN + 1の状況に言及しました。
以下に例を示します (ちなみに、私は Laravel を使用しています)。
$pages = Page::where('slug', '=', $slug)->get(array('id', 'title', 'slug'));
foreach ($pages as $page) {
$children = Page::where('parent_id', '=', $page->id)->get(array('id', 'title', 'slug'));
foreach ($children as $child) {
$grandChildren = Page::where('parent_id', '=', $child->id)->get(array('id', 'title', 'slug'));
}
}
初心者なので、ページ クエリを減らして、これを処理するより良い方法を見つけようとしています。
問題は、foreach ループの外で子ページを取得するにはどうすればよいかということです。すべてが動的に行われるため、これを処理するには柔軟なアプローチが必要です。