sql >> データベース >  >> RDS >> Mysql

MySQLデータベースからページネーションごとにN個のレコードを選択するにはどうすればよいですか?

    最初の百

     SELECT * FROM <table_name> ORDER BY id ASC LIMIT 0, 100
    

    次の百

     SELECT * FROM <table_name> ORDER BY id ASC LIMIT 100, 100
    

    あなたは注文を入れることに非常に注意を払っています

    説明されている制限ステートメント: LIMIT ステートメントはWHEREではありません 句。 idでは選択されません 実際には、いかなる基準によっても(where 句はそれを行います)代わりにlimit 句は、単にblockの一部が返されることを保証します 「すべて」のサブセットである結果の。したがって、order byに言及することが重要である理由 毎回、後続の各呼び出しでデータブロックの正しい部分が順番に表示され、それらを介して「次へ」、「次へ」、「次へ」を実行できます。

    例:無秩序なテーブルの場合this_table

    +-------+-------------+
    |  id   |   value     |
    +-------+-------------+
    |  1    |     bob     |
    |  12   |     fish    |
    |  112  |     pink    |
    |  2    |     cat     |
    |  8    |     dog     |
    |  56   |     blue    |
    |  88   |     grey    |
    |  87   |     red     |
    +-------+-------------+
    

    選択は以下のように戻ります:

    SELECT * FROM <this_table> ORDER BY id ASC LIMIT 0,5
    +-------+-------------+
    |  id   |   value     |
    +-------+-------------+
    |  1    |     bob     |
    |  2    |     cat     |
    |  8    |     dog     |
    |  12   |     fish    |
    |  56   |     blue    |
    +-------+-------------+
    

    および

    SELECT * FROM <this_table> ORDER BY id ASC LIMIT 5,5
    +-------+-------------+
    |  id   |   value     |
    +-------+-------------+
    |  87   |     red     |
    |  88   |     grey    |
    |  112  |     pink    |
    +-------+-------------+
    

    行9と10がないことに注意してください。これは意図的なものであり、MySQLが意図したとおりに機能していることを示しています。

    ちなみに、idにインデックスを追加することも検討する必要があります これにより、これらの選択の速度が大幅に向上します

    ALTER TABLE <table_name> ADD INDEX `id` (`id`)
    


    1. MariaDBでのHOUR()のしくみ

    2. 配列内のすべての値がデータベース列に存在するかどうかを確認します

    3. phpmyadminを削除するためのトリガーを作成する方法

    4. Chart.js-mysqlとphpを使用してデータベースからデータを取得する