1. ホーム
  2. mysql

[解決済み] MySQLのページネーションはダブルクエリなしで?

2022-08-16 03:12:16

質問

MySQL クエリから結果の数を取得し、同時に結果を制限する方法があるのかどうか疑問に思っていました。

ページネーションが機能する方法(私が理解するところでは)、最初に私は次のようなことをします。

query = SELECT COUNT(*) FROM `table` WHERE `some_condition`

num_rows(query)を取得した後、結果の数を得ました。しかし、実際に結果を制限するためには、次のような2番目のクエリを実行する必要があります。

query2 = SELECT COUNT(*) FROM `table` WHERE `some_condition` LIMIT 0, 10

私の質問です。与えられた結果の総数を取得し、1つのクエリで返される結果を制限する方法はありますか?または、これを行うより効率的な方法。ありがとうございます。

どのように解決するのですか?

いいえ、ページ分割をしたい多くのアプリケーションはそうしなければならないのです。クエリが2回になるとはいえ、これは信頼性が高く防弾です。しかし、数秒間カウントをキャッシュすることができ、それは多くのことを助けるでしょう。

もうひとつの方法は SQL_CALC_FOUND_ROWS 節を使用し、その後に SELECT FOUND_ROWS() を呼び出す必要があります。 FOUND_ROWS() の呼び出しを後回しにしなければならないことは別として、これには問題があります。そこには MySQL のバグです。 に影響を与えるということです。 ORDER BY クエリに影響を与え、大きなテーブルでは 2 つのクエリを使用する素朴な方法よりもはるかに遅くなります。